Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
ó
ǍEYc@sadZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
Z
ddlZddlZddl
Z
ddl
mZddlmZddlmZddlmZddlmZddlmZdd	lmZejeƒZd
dgZd„Zd
„Zd„Zd„Ze
j ej!ƒde"fd„ƒYƒZ#de$fd„ƒYZ%e
j e%ƒde"fd„ƒYƒZ&de"fd„ƒYZ'de(fd„ƒYZ)de'fd„ƒYZ*de"fd„ƒYZ+de"fd„ƒYZ,d e#fd!„ƒYZ-d"e"fd#„ƒYZ.d$d
d%„Z/dS(&s:Generic Node base class for all workers that run on hosts.iÿÿÿÿN(tevent(t	lockutils(t_(t_options(teventlet_backdoor(tsystemd(tthreadgrouptreloadtmutatecCs dtjtjtjƒfgS(s&Entry point for oslo-config-generator.N(tNonetcopytdeepcopyRteventlet_backdoor_optstservice_opts(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt	list_opts1scCsyy(tjƒtjtjjƒƒk}WnJtjk
rDt}n1t	k
rt}|j
t
jkrnt}qu‚nX|S(N(tostgetpgrpt	tcgetpgrptsyststdouttfilenotiotUnsupportedOperationtTruetOSErrorterrnotENOTTY(t	is_daemonterr((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt
_is_daemon7s(		cCs,tƒjdƒo|tjks%tStƒS(NtSIGHUP(t
SignalHandlertis_signal_supportedtsignalRtFalseR(tsigno((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_is_sighup_and_daemonKscCs:t|tƒs6ttdƒi|d6td6ƒ‚ndS(Ns1Service %(service)s must an instance of %(base)s!tservicetbase(t
isinstancetServiceBaset	TypeErrorR(R%((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_check_service_baseTsR(cBsVeZdZejd„ƒZejd„ƒZejd„ƒZejd„ƒZRS(sBase class for all services.cCsdS(sStart service.N((tself((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytstart^scCsdS(s
Stop service.N((R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytstopbscCsdS(sWait for service to complete.N((R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytwaitfscCsdS(s_Reset service.

        Called in case service running in daemon mode receives SIGHUP.
        N((R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytresetjs(	t__name__t
__module__t__doc__tabctabstractmethodR,R-R.R/(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR(Zs
t	SingletoncBs#eZiZejƒZd„ZRS(cOs^tjdd|jƒ9||jkrMtt|ƒj||Ž|j|<nWdQX|j|S(Ntsingleton_lockt
semaphores(Rtlockt_semaphorest
_instancestsuperR5t__call__(tclstargstkwargs((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR<vs
(R0R1R:Rt
SemaphoresR9R<(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR5rsRcBsGeZd„Zd„Zd„Zd„Zd„Zd„Zd„ZRS(cs‰ttˆƒj||Ždˆ_t‡fd†ttƒDƒƒˆ_td„ˆjjƒDƒƒˆ_	t
jtƒˆ_
ˆjƒdS(NtSIG_DFLtSIG_IGNc3sB|]8}|jdƒr|ˆjkr|tt|ƒfVqdS(tSIGN(t
startswitht_ignore_signalstgetattrR!(t.0tname(R+(sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pys	<genexpr>†scss!|]\}}||fVqdS(N((RGRHtsigval((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pys	<genexpr>‹s(sSIG_DFLsSIG_IGN(R;Rt__init__REtdicttdirR!t_signals_by_nametitemstsignals_to_nametcollectionstdefaultdicttsett_signal_handlerstclear(R+R>R?((R+sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJs	cCs8x$|jD]}tj|tjƒq
W|jjƒdS(N(RSR!RART(R+tsig((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRTscCs%x|D]}|j||ƒqWdS(N(tadd_handler(R+tsignalsthandlerRU((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytadd_handlers•s
cCsK|j|ƒsdS|j|}|j|j|ƒtj||jƒdS(N(R RMRStaddR!t_handle_signal(R+RURXR#((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRV™s

cCstj|j||ƒdS(N(teventlettspawnt_handle_signal_cb(R+R#tframe((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR[ scCs)x"|j|D]}|||ƒqWdS(N(RS(R+R#R_RX((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR^°scCs
||jkS(N(RM(R+tsig_name((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR ´s(	R0R1RJRTRYRVR[R^R (((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR~s						tLaunchercBsAeZdZdd„Zdd„Zd„Zd„Zd„ZRS(s:Launch one or more services and wait for them to complete.RcCsl||_|jtjƒtƒ|_tj|jƒ|_||_	|t
krhttdƒ|ƒ‚ndS(sInitialize the service launcher.

        :param restart_method: If 'reload', calls reload_config_files on
            SIGHUP. If 'mutate', calls mutate_config_files on SIGHUP. Other
            values produce a ValueError.
        :returns: None

        sInvalid restart_method: %sN(
tconft
register_optsRR
tServicestservicesRtinitialize_if_enabledt
backdoor_porttrestart_methodt_LAUNCHER_RESTART_METHODSt
ValueErrorR(R+RbRh((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJ»s			icCsW|dk	r-|dkr-ttdƒƒ‚nt|ƒ|j|_|jj|ƒdS(sLoad and start the given service.

        :param service: The service you would like to start, must be an
                        instance of :class:`oslo_service.service.ServiceBase`
        :param workers: This param makes this method compatible with
                        ProcessLauncher.launch_service. It must be None, 1 or
                        omitted.
        :returns: None

        is(Launcher asked to start multiple workersN(R	RjRR*RgReRZ(R+R%tworkers((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytlaunch_serviceÍs

cCs|jjƒdS(sPStop all services which are currently running.

        :returns: None

        N(ReR-(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR-ÞscCs|jjƒdS(s]Wait until all services have been stopped, and then return.

        :returns: None

        N(ReR.(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR.æscCsO|jdkr|jjƒn|jdkr>|jjƒn|jjƒdS(s±Reload config files and restart service.

        :returns: The return value from reload_config_files or
          mutate_config_files, according to the restart_method.
        RRN(RhRbtreload_config_filestmutate_config_filesRetrestart(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRoîs
(R0R1R2RJRlR-R.Ro(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRa¸s		t
SignalExitcBseZdd„ZRS(icCs#tt|ƒj|ƒ||_dS(N(R;RpRJR#(R+R#texccode((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJüs(R0R1RJ(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRpûstServiceLaunchercBsYeZdZdd„Zd„Zd„Zd„Zd„Zd„Zd„Z	d	„Z
RS(
s-Runs one or more service in a parent process.RcCs,tt|ƒj|d|ƒtƒ|_dS(stConstructor.

        :param conf: an instance of ConfigOpts
        :param restart_method: passed to super
        RhN(R;RrRJRtsignal_handler(R+RbRh((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJs
cGsO|jjƒ|jjrA|jjdƒrAtj|jjƒn|jƒdS(NtSIGALRM(RsRTRbtgraceful_shutdown_timeoutR R!talarmR-(R+R>((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_graceful_shutdown
s

cGs |jjƒttjƒ‚dS(N(RsRTRpR!R(R+R>((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_reload_services
cGstjdƒtjdƒdS(Ns+Caught SIGINT signal, instantaneous exitingi(tLOGtinfoRt_exit(R+R>((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt
_fast_exits
cGstjdƒtjdƒdS(Ns9Graceful shutdown timeout exceeded, instantaneous exitingi(RyRzRR{(R+R>((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_on_timeout_exits
cCsi|jjƒ|jjd|jƒ|jjd|jƒ|jjd|jƒ|jjd|jƒdS(s,Set self._handle_signal as a signal handler.tSIGTERMtSIGINTRRtN(RsRTRVRwR|RxR}(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt
handle_signal!s

cCséd}d}|jjr>tjdƒ|jjttjƒnytt	|ƒj
ƒWn‡tk
rŸ}|jj
|j}tjd|ƒ|j}|j}n@tk
rÄ}|jƒ|j}ntk
rÞ|jƒnX||fS(NisFull set of CONF:sCaught %s, exiting(R	Rbtlog_optionsRytdebugtlog_opt_valuestloggingtDEBUGR;RrR.RpRsROR#Rztcodet
SystemExitR-t	Exception(R+tstatusR#texctsigname((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_wait_for_exit_or_signal)s$
	

cCsqtjƒ|jjƒx@trY|jƒ|jƒ\}}t|ƒsLPn|jƒqWt	t
|ƒjƒ|S(shWait for a service to terminate and restart it on SIGHUP.

        :returns: termination status
        (Rtnotify_onceRsRTRR€RŒR$RoR;RrR.(R+R‰R#((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR.?s

	
(R0R1R2RJRwRxR|R}R€RŒR.(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRrs
						tServiceWrappercBseZd„ZRS(cCs+||_||_tƒ|_g|_dS(N(R%RkRRtchildrent	forktimes(R+R%Rk((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJRs		(R0R1RJ(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRŽQstProcessLaunchercBs§eZdZddd„Zd„Zd„Zd„Zd„Zd„Zd	„Z	d
„Z
d„Zd„Zd
„Z
dd„Zd„Zd„Zd„Zd„ZRS(s0Launch a service with a given number of workers.g{®Gáz„?RcCs»||_|jtjƒi|_d|_t|_||_	d|_
tjƒ\}|_
tjj|dƒ|_tƒ|_|jƒ||_|tkr·ttdƒ|ƒ‚ndS(sConstructor.

        :param conf: an instance of ConfigOpts
        :param wait_interval: The interval to sleep for between checks
                              of child process exit.
        :param restart_method: If 'reload', calls reload_config_files on
            SIGHUP. If 'mutate', calls mutate_config_files on SIGHUP. Other
            values produce a ValueError.
        trsInvalid restart_method: %sN(RbRcRR
RR	t	sigcaughtRtrunningt
wait_intervaltlauncherRtpipet	writepipeR\tgreeniot	GreenPipetreadpipeRRsR€RhRiRjR(R+RbR•Rhtrfd((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJ\s
						
	cCs\|jjd|jƒ|jjd|jƒ|jjd|jƒ|jjd|jƒdS(s1Add instance's signal handlers to class handlers.R~RRRtN(RsRVt_handle_termt_handle_hupR|t_on_alarm_exit(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR€uscCs#||_t|_|jjƒdS(slHandle a TERM event.

        :param signo: signal number
        :param frame: current stack frame
        N(R“R"R”RsRT(R+R#R_((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR|s		cCs||_t|_dS(skHandle a HUP event.

        :param signo: signal number
        :param frame: current stack frame
        N(R“R"R”(R+R#R_((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRžˆs	cCstjdƒtjdƒdS(Ns+Caught SIGINT signal, instantaneous exitingi(RyRzRR{(R+R#R_((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR|•s
cCstjdƒtjdƒdS(Ns9Graceful shutdown timeout exceeded, instantaneous exitingi(RyRzRR{(R+R#R_((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRŸ™s
cCsG|jjdƒtjdƒ|jr6|jjƒntjdƒdS(Nis-Parent process has died unexpectedly, exiting(R›treadRyRzR–R-Rtexit(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt
_pipe_watcheržs

	csk‡fd†}‡fd†}ˆjjƒˆjjd|ƒˆjjd|ƒˆjjdˆjƒdS(NcsˆjjƒˆjjƒdS(N(RsRTR–R-(R>(R+(sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_sigterm­s
cs ˆjjƒttjƒ‚dS(N(RsRTRpR!R(R>(R+(sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_sighup±s
R~RR(RsRTRVR|(R+R£R¤((R+sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_child_process_handle_signalªs
cCs­d}d}y|jƒWn†tk
rd}|jj|j}tjd|ƒ|j}|j}n?tk
r}|j}n$t	k
r¢tj
dƒd}nX||fS(NisChild caught %s, exitingsUnhandled exceptioni(R.RpRsROR#RyRzR†R‡t
BaseExceptiont	exception(R+R–R‰R#RŠR‹((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_child_wait_for_exit_or_signal¼s	


cCsj|jƒtjjƒtj|jƒtj|jƒt	j
ƒt|jd|j
ƒ}|j|ƒ|S(NRh(R¥R\thubstuse_hubRtcloseR˜tspawn_nR¢trandomtseedRaRbRhRl(R+R%R–((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_child_processÒs



cCsEt|jƒ|jkrhtjƒ|jd|jkrUtjdƒtjdƒn|jjdƒn|jjtjƒƒt	j
ƒ}|dkr|j|jƒ|_
xVtr|jƒ|j|j
ƒ\}}t|ƒsó|j
jƒPn|j
jƒq®Wt	j|ƒntjd|ƒ|jj|ƒ||j|<|S(NisForking too fast, sleepingisStarted child %d(tlenRRkttimeRyRztsleeptpoptappendRtforkR¯R%R–RR¥R¨R$R.RoR{R‚RRZ(R+twraptpidR‰R#((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_start_childås, 
	


icCset|ƒt||ƒ}tjd|jƒx2|jr`t|jƒ|jkr`|j|ƒq/WdS(sLaunch a service with a given number of workers.

       :param service: a service to launch, must be an instance of
              :class:`oslo_service.service.ServiceBase`
       :param workers: a number of processes in which a service
              will be running
        sStarting %d workersN(	R*RŽRyRzRkR”R°RR¸(R+R%RkR¶((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRls

$cCsy)tjdtjƒ\}}|s(dSWn5tk
r`}|jtjtjfkr\‚ndSXtj|ƒr¡tj	|ƒ}t
jdtd|d|ƒƒn.tj
|ƒ}t
jdtd|d|ƒƒ||jkròt
jd|ƒdS|jj|ƒ}|jj|ƒ|S(Nis&Child %(pid)d killed by signal %(sig)dR·RUs)Child %(pid)s exited with status %(code)dR†spid %d not in child list(RtwaitpidtWNOHANGR	RRtEINTRtECHILDtWIFSIGNALEDtWTERMSIGRyRzRKtWEXITSTATUSRtwarningR³tremove(R+R·R‰RŠRUR†R¶((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_wait_childs*		cCstxm|jro|jƒ}|s7tjj|jƒqnx2|jrkt|jƒ|jkrk|j	|ƒq:WqWdS(N(
R”RÂR\tgreenthreadR²R•R°RRkR¸(R+R¶((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt_respawn_children3s$cCsÄtjƒ|jjr<tjdƒ|jjttjƒnyxt	rY|j
ƒ|jƒ|jsidS|j
j|j}tjd|ƒt|jƒsŸPn|jdkr¾|jjƒn|jdkrÝ|jjƒnx=tg|jjƒD]}|j^qóƒD]}|jƒq	Wx$|jD]}tj|tjƒq'Wt	|_d|_qBWWn$tj j!k
rtjdƒnX|jj"r¶|j
j#dƒr¶tj$|jj"ƒn|j%ƒdS(s<Loop waiting on children to die and respawning as necessary.sFull set of CONF:NsCaught %s, stopping childrenRRs-Wait called after thread killed. Cleaning up.Rt(&RRRbRRyR‚RƒR„R…RR€RÄR“RsRORzR$RhRmRnRRRtvaluesR%R/RtkillR!R~R”R	R\tgreenlettGreenletExitRuR RvR-(R+R‹R¶R%R·((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR.?s>

	

	,	cCsÿt|_tjdƒx=tg|jjƒD]}|j^q,ƒD]}|jƒqBWtjdƒxV|jD]K}yt	j
|tjƒWqmt
k
r·}|jtjkr¸‚q¸qmXqmW|jrûtjdt|jƒƒx|jr÷|jƒqáWndS(s+Terminate child processes and wait on each.sStop services.sKilling children.sWaiting on %d children to exitN(R"R”RyR‚RRRRÅR%R-RRÆR!R~RRtESRCHRzR°RÂ(R+R¶R%R·RŠ((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR-ls 	
,
	(R0R1R2RJR€RRžR|RŸR¢R¥R¨R¯R¸RlRÂRÄR.R-(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR‘Ys"			
							#			-tServicecBsAeZdZdd„Zd„Zd„Zed„Zd„ZRS(s-Service object for binaries running on hosts.iècCstj|ƒ|_dS(N(RtThreadGroupttg(R+tthreads((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJ‡scCsdS(s-Reset a service in case it received a SIGHUP.N((R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR/ŠscCsdS(sStart a service.N((R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR,scCs|jj|ƒdS(s‘Stop a service.

        :param graceful: indicates whether to wait for all threads to finish
               or terminate them instantly
        N(RÌR-(R+tgraceful((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR-scCs|jjƒdS(s Wait for a service to shut down.N(RÌR.(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR.˜s(	R0R1R2RJR/R,R"R-R.(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRʄs		RdcBsDeZd„Zd„Zd„Zd„Zd„Zed„ƒZRS(cCs+g|_tjƒ|_tjƒ|_dS(N(ReRRËRÌRtEventtdone(R+((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRJŸs	cCs0|jj|ƒ|jj|j||jƒdS(sgAdd a service to a list and create a thread to run it.

        :param service: service to run
        N(ReR´RÌt
add_threadtrun_serviceRÐ(R+R%((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRZ¤scCsNx|jD]}|jƒq
W|jjƒs=|jjƒn|jjƒdS(s<Wait for graceful shutdown of services and kill the threads.N(ReR-RÐtreadytsendRÌ(R+R%((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR-¬s
cCs/x|jD]}|jƒq
W|jjƒdS(sWait for services to shut down.N(ReR.RÌ(R+R%((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyR.¹scCsW|jƒtjƒ|_x7|jD],}|jƒ|jj|j||jƒq#WdS(s-Reset services and start them in new threads.N(	R-RRÏRÐReR/RÌRÑRÒ(R+trestart_service((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRo¿s


cCsIy|jƒWn*tk
r:tjdƒtdƒ‚nX|jƒdS(s£Service start wrapper.

        :param service: service to run
        :param done: event to wait on until a shutdown is triggered
        :returns: None

        sError starting thread.iN(R,RˆRyR§R‡R.(R%RÐ((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRÒÇs	

(	R0R1RJRZR-R.RotstaticmethodRÒ(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyRds			
		icCsƒ|dk	r-|dkr-ttdƒƒ‚n|dksE|dkrZt|d|ƒ}nt|d|ƒ}|j|d|ƒ|S(sZLaunch a service with a given number of workers.

    :param conf: an instance of ConfigOpts
    :param service: a service to launch, must be an instance of
           :class:`oslo_service.service.ServiceBase`
    :param workers: a number of processes in which a service will be running
    :param restart_method: Passed to the constructed launcher. If 'reload', the
        launcher will call reload_config_files on SIGHUP. If 'mutate', it will
        call mutate_config_files on SIGHUP. Other values produce a ValueError.
    :returns: instance of a launcher that was used to launch the service
    is%Number of workers should be positive!iRhRkN(R	RjRRrR‘Rl(RbR%RkRhR–((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pytlaunchÙs
(0R2R3RPR
RRR„RR­R!tsixRR±R\Rtoslo_concurrencyRtoslo_service._i18nRtoslo_serviceRRRRt	getLoggerR0RyRiRRR$R*t
add_metaclasstABCMetatobjectR(ttypeR5RRaR‡RpRrRŽR‘RÊRdR×(((sI/home/tvault/.virtenv/lib/python2.7/site-packages/oslo_service/service.pyt<module>sP					9CPÿ,<