当前位置: 首页>>代码示例>>Python>>正文


Python ExitNotifyThread.setDaemon方法代码示例

本文整理汇总了Python中offlineimap.threadutil.ExitNotifyThread.setDaemon方法的典型用法代码示例。如果您正苦于以下问题:Python ExitNotifyThread.setDaemon方法的具体用法?Python ExitNotifyThread.setDaemon怎么用?Python ExitNotifyThread.setDaemon使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在offlineimap.threadutil.ExitNotifyThread的用法示例。


在下文中一共展示了ExitNotifyThread.setDaemon方法的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: IMAPRepository

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]
class IMAPRepository(BaseRepository):
    def __init__(self, reposname, account):
        """Initialize an IMAPRepository object."""
        BaseRepository.__init__(self, reposname, account)
        # self.ui is being set by the BaseRepository
        self._host = None
        self.imapserver = imapserver.IMAPServer(self)
        self.folders = None
        if self.getconf('sep', None):
            self.ui.info("The 'sep' setting is being ignored for IMAP "
                         "repository '%s' (it's autodetected)" % self)

    def startkeepalive(self):
        keepalivetime = self.getkeepalive()
        if not keepalivetime: return
        self.kaevent = Event()
        self.kathread = ExitNotifyThread(target = self.imapserver.keepalive,
                                         name = "Keep alive " + self.getname(),
                                         args = (keepalivetime, self.kaevent))
        self.kathread.setDaemon(1)
        self.kathread.start()

    def stopkeepalive(self):
        if not hasattr(self, 'kaevent'):
            # Keepalive is not active.
            return

        self.kaevent.set()
        del self.kathread
        del self.kaevent

    def holdordropconnections(self):
        if not self.getholdconnectionopen():
            self.dropconnections()

    def dropconnections(self):
        self.imapserver.close()

    def getholdconnectionopen(self):
        if self.getidlefolders():
            return 1
        return self.getconfboolean("holdconnectionopen", 0)

    def getkeepalive(self):
        num = self.getconfint("keepalive", 0)
        if num == 0 and self.getidlefolders():
            return 29*60
        else:
            return num

    def getsep(self):
        """Return the folder separator for the IMAP repository

        This requires that self.imapserver has been initialized with an
        acquireconnection() or it will still be `None`"""
        assert self.imapserver.delim != None, "'%s' " \
            "repository called getsep() before the folder separator was " \
            "queried from the server" % self
        return self.imapserver.delim

    def gethost(self):
        """Return the configured hostname to connect to

        :returns: hostname as string or throws Exception"""
        if self._host:  # use cached value if possible
            return self._host

        # 1) check for remotehosteval setting
        if self.config.has_option(self.getsection(), 'remotehosteval'):
            host = self.getconf('remotehosteval')
            try:
                host = self.localeval.eval(host)
            except Exception as e:
                raise OfflineImapError("remotehosteval option for repository "\
                                       "'%s' failed:\n%s" % (self, e),
                                       OfflineImapError.ERROR.REPO)
            if host:
                self._host = host
                return self._host
        # 2) check for plain remotehost setting
        host = self.getconf('remotehost', None)
        if host != None:
            self._host = host
            return self._host

        # no success
        raise OfflineImapError("No remote host for repository "\
                                   "'%s' specified." % self,
                               OfflineImapError.ERROR.REPO)


    def get_remote_identity(self):
        """
        Remote identity is used for certain SASL mechanisms
        (currently -- PLAIN) to inform server about the ID
        we want to authorize as instead of our login name.

        """

        return self.getconf('remote_identity', default=None)
#.........这里部分代码省略.........
开发者ID:Stebalien,项目名称:offlineimap,代码行数:103,代码来源:IMAP.py

示例2: IMAPRepository

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]
class IMAPRepository(BaseRepository):
    def __init__(self, reposname, account):
        """Initialize an IMAPRepository object."""
        BaseRepository.__init__(self, reposname, account)
        self.imapserver = imapserver.ConfigedIMAPServer(self)
        self.folders = None
        self.nametrans = lambda foldername: foldername
        self.folderfilter = lambda foldername: 1
        self.folderincludes = []
        self.foldersort = cmp
        localeval = self.localeval
        if self.config.has_option(self.getsection(), 'nametrans'):
            self.nametrans = localeval.eval(self.getconf('nametrans'),
                                            {'re': re})
        if self.config.has_option(self.getsection(), 'folderfilter'):
            self.folderfilter = localeval.eval(self.getconf('folderfilter'),
                                               {'re': re})
        if self.config.has_option(self.getsection(), 'folderincludes'):
            self.folderincludes = localeval.eval(self.getconf('folderincludes'),
                                                 {'re': re})
        if self.config.has_option(self.getsection(), 'foldersort'):
            self.foldersort = localeval.eval(self.getconf('foldersort'),
                                             {'re': re})

    def startkeepalive(self):
        keepalivetime = self.getkeepalive()
        if not keepalivetime: return
        self.kaevent = Event()
        self.kathread = ExitNotifyThread(target = self.imapserver.keepalive,
                                         name = "Keep alive " + self.getname(),
                                         args = (keepalivetime, self.kaevent))
        self.kathread.setDaemon(1)
        self.kathread.start()

    def stopkeepalive(self):
        if not hasattr(self, 'kaevent'):
            # Keepalive is not active.
            return

        self.kaevent.set()
        del self.kathread
        del self.kaevent

    def holdordropconnections(self):
        if not self.getholdconnectionopen():
            self.dropconnections()

    def dropconnections(self):
        self.imapserver.close()

    def getholdconnectionopen(self):
        return self.getconfboolean("holdconnectionopen", 0)

    def getkeepalive(self):
        return self.getconfint("keepalive", 0)

    def getsep(self):
        return self.imapserver.delim

    def gethost(self):
        host = None
        localeval = self.localeval

        if self.config.has_option(self.getsection(), 'remotehosteval'):
            host = self.getconf('remotehosteval')
        if host != None:
            return localeval.eval(host)

        host = self.getconf('remotehost')
        if host != None:
            return host

    def getuser(self):
        user = None
        localeval = self.localeval

        if self.config.has_option(self.getsection(), 'remoteusereval'):
            user = self.getconf('remoteusereval')
        if user != None:
            return localeval.eval(user)

        user = self.getconf('remoteuser')
        if user != None:
            return user

        try:
            netrcentry = netrc.netrc().authenticators(self.gethost())
        except IOError, inst:
            if inst.errno != errno.ENOENT:
                raise
        else:
开发者ID:demos,项目名称:offlineimap,代码行数:93,代码来源:IMAP.py

示例3: __init__

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]

#.........这里部分代码省略.........
		
		self.configuration.add_section('Repository ' + dstusername + '_local')
		self.configuration.add_section('Repository ' + dstusername + '_remote')

		self.configuration.set('Repository ' + dstusername + '_local', 'type', 'IMAP')
		self.configuration.set('Repository ' + dstusername + '_local', 'remotehost', newserveraddr)
		self.configuration.set('Repository ' + dstusername + '_local', 'remoteuser', dstusername)
		self.configuration.set('Repository ' + dstusername + '_local', 'remotepass', dstpasswd)

		self.configuration.set('Repository ' + dstusername + '_remote', 'type', 'IMAP')
		self.configuration.set('Repository ' + dstusername + '_remote', 'remotehost', server)
		self.configuration.set('Repository ' + dstusername + '_remote', 'remoteuser', srcusername)
		self.configuration.set('Repository ' + dstusername + '_remote', 'remotepass', srcpasswd)
		
		self.monothread = 0
		# Setup a interface

		ui = offlineimap.ui.detector.findUI(self.configuration, 'TTY.TTYUI')
		UIBase.setglobalui(ui)
#		ui.add_debug('imap')
#		ui.add_debug('thread')
#		imaplib.Debug = 5
#		threading._VERBOSE = 1

		lock(self.configuration, ui)
	
		def sigterm_handler(signum, frame):
			# die immediately
			ui.terminate(errormsg="terminating...")
		signal.signal(signal.SIGTERM,sigterm_handler)

		try:
			pidfd = open(config.getmetadatadir() + "/pid", "w")
			pidfd.write(str(os.getpid()) + "\n")
			pidfd.close()
		except:
			pass
		
		try:
			activeaccounts = self.configuration.get("general", "accounts")
			activeaccounts = activeaccounts.replace(" ", "")
			activeaccounts = activeaccounts.split(",")
			allaccounts = accounts.AccountHashGenerator(self.configuration)

			if self.monothread:
				threadutil.initInstanceLimit("ACCOUNTLIMIT", 1)
			else:
				threadutil.initInstanceLimit("ACCOUNTLIMIT", self.configuration.getdefaultint("general", "maxsyncaccounts", 1))

			for reposname in self.configuration.getsectionlist('Repository'):
				for instancename in ["FOLDER_" + reposname, "MSGCOPY_" + reposname]:
					if self.monothread:
						threadutil.initInstanceLimit(instancename, 1)
					else:
						threadutil.initInstanceLimit(instancename, self.configuration.getdefaultint('Repository ' + reposname, "maxconnections", 1))
	
			syncaccounts = []
			for account in activeaccounts:
				if account not in syncaccounts:
					syncaccounts.append(account)
	
			siglisteners = []
			def sig_handler(signum, frame):
				if signum == signal.SIGUSR1:
					# tell each account to do a full sync asap
					signum = (1,)
				elif signum == signal.SIGHUP:
					# tell each account to die asap
					signum = (2,)
				elif signum == signal.SIGUSR2:
					# tell each account to do a full sync asap, then die
					signum = (1, 2)
				# one listener per account thread (up to maxsyncaccounts)
				for listener in siglisteners:
					for sig in signum:
						listener.put_nowait(sig)
			signal.signal(signal.SIGHUP,sig_handler)
			signal.signal(signal.SIGUSR1,sig_handler)
			signal.signal(signal.SIGUSR2,sig_handler)
	
			threadutil.initexitnotify()
			t = ExitNotifyThread(target=syncmaster.syncitall,
						name='Sync Runner',
						kwargs = {'accounts': syncaccounts,
						'config': self.configuration,
						'siglisteners': siglisteners})
			t.setDaemon(1)
			t.start()
		
		except:
			ui.mainException()

		try:
			threadutil.exitnotifymonitorloop(threadutil.threadexited)
		except SystemExit:
			raise
		except:
			ui.mainException()				  # Also expected to terminate.

		rmtree(self.configuration.getmetadatadir())
开发者ID:EternalCorpse,项目名称:scripts,代码行数:104,代码来源:migracao_ldap_zimbra.py

示例4: startup

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]

#.........这里部分代码省略.........
            for section in [remote_repo_section, local_repo_section]:
                config.set(section, "folderfilter", folderfilter)
                config.set(section, "folderincludes", folderincludes)

    lock(config, ui)

    def sigterm_handler(signum, frame):
        # die immediately
        ui.terminate(errormsg="terminating...")
    signal.signal(signal.SIGTERM,sigterm_handler)

    try:
        pidfd = open(config.getmetadatadir() + "/pid", "w")
        pidfd.write(str(os.getpid()) + "\n")
        pidfd.close()
    except:
        pass

    try:
        if options.has_key('-l'):
            sys.stderr = ui.logfile

        socktimeout = config.getdefaultint("general", "socktimeout", 0)
        if socktimeout > 0:
            socket.setdefaulttimeout(socktimeout)

        activeaccounts = config.get("general", "accounts")
        if options.has_key('-a'):
            activeaccounts = options['-a']
        activeaccounts = activeaccounts.replace(" ", "")
        activeaccounts = activeaccounts.split(",")
        allaccounts = accounts.AccountHashGenerator(config)

        syncaccounts = []
        for account in activeaccounts:
            if account not in allaccounts:
                if len(allaccounts) == 0:
                    errormsg = 'The account "%s" does not exist because no accounts are defined!'%account
                else:
                    errormsg = 'The account "%s" does not exist.  Valid accounts are:'%account
                    for name in allaccounts.keys():
                        errormsg += '\n%s'%name
                ui.terminate(1, errortitle = 'Unknown Account "%s"'%account, errormsg = errormsg)
            if account not in syncaccounts:
                syncaccounts.append(account)

        server = None
        remoterepos = None
        localrepos = None

        if options.has_key('-1'):
            threadutil.initInstanceLimit("ACCOUNTLIMIT", 1)
        else:
            threadutil.initInstanceLimit("ACCOUNTLIMIT",
                                         config.getdefaultint("general", "maxsyncaccounts", 1))

        for reposname in config.getsectionlist('Repository'):
            for instancename in ["FOLDER_" + reposname,
                                 "MSGCOPY_" + reposname]:
                if options.has_key('-1'):
                    threadutil.initInstanceLimit(instancename, 1)
                else:
                    threadutil.initInstanceLimit(instancename,
                                                 config.getdefaultint('Repository ' + reposname, "maxconnections", 1))
        siglisteners = []
        def sig_handler(signum, frame):
            if signum == signal.SIGUSR1:
                # tell each account to do a full sync asap
                signum = (1,)
            elif signum == signal.SIGHUP:
                # tell each account to die asap
                signum = (2,)
            elif signum == signal.SIGUSR2:
                # tell each account to do a full sync asap, then die
                signum = (1, 2)
            # one listener per account thread (up to maxsyncaccounts)
            for listener in siglisteners:
                for sig in signum:
                    listener.put_nowait(sig)
        signal.signal(signal.SIGHUP,sig_handler)
        signal.signal(signal.SIGUSR1,sig_handler)
        signal.signal(signal.SIGUSR2,sig_handler)

        threadutil.initexitnotify()
        t = ExitNotifyThread(target=syncmaster.syncitall,
                             name='Sync Runner',
                             kwargs = {'accounts': syncaccounts,
                                       'config': config,
                                       'siglisteners': siglisteners})
        t.setDaemon(1)
        t.start()
    except:
        ui.mainException()

    try:
        threadutil.exitnotifymonitorloop(threadutil.threadexited)
    except SystemExit:
        raise
    except:
        ui.mainException()                  # Also expected to terminate.
开发者ID:avsm,项目名称:perscon-imap,代码行数:104,代码来源:init.py

示例5: IMAPRepository

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]
class IMAPRepository(BaseRepository):
    def __init__(self, reposname, account):
        """Initialize an IMAPRepository object."""
        BaseRepository.__init__(self, reposname, account)
        # self.ui is being set by the BaseRepository
        self._host = None
        self.imapserver = imapserver.IMAPServer(self)
        self.folders = None
        self.nametrans = lambda foldername: foldername
        self.folderfilter = lambda foldername: 1
        self.folderincludes = []
        self.foldersort = cmp
        localeval = self.localeval
        if self.config.has_option(self.getsection(), 'nametrans'):
            self.nametrans = localeval.eval(self.getconf('nametrans'),
                                            {'re': re})
        if self.config.has_option(self.getsection(), 'folderfilter'):
            self.folderfilter = localeval.eval(self.getconf('folderfilter'),
                                               {'re': re})
        if self.config.has_option(self.getsection(), 'folderincludes'):
            self.folderincludes = localeval.eval(self.getconf('folderincludes'),
                                                 {'re': re})
        if self.config.has_option(self.getsection(), 'foldersort'):
            self.foldersort = localeval.eval(self.getconf('foldersort'),
                                             {'re': re})

    def startkeepalive(self):
        keepalivetime = self.getkeepalive()
        if not keepalivetime: return
        self.kaevent = Event()
        self.kathread = ExitNotifyThread(target = self.imapserver.keepalive,
                                         name = "Keep alive " + self.getname(),
                                         args = (keepalivetime, self.kaevent))
        self.kathread.setDaemon(1)
        self.kathread.start()

    def stopkeepalive(self):
        if not hasattr(self, 'kaevent'):
            # Keepalive is not active.
            return

        self.kaevent.set()
        del self.kathread
        del self.kaevent

    def holdordropconnections(self):
        if not self.getholdconnectionopen():
            self.dropconnections()

    def dropconnections(self):
        self.imapserver.close()

    def getholdconnectionopen(self):
        if self.getidlefolders():
            return 1
        return self.getconfboolean("holdconnectionopen", 0)

    def getkeepalive(self):
        num = self.getconfint("keepalive", 0)
        if num == 0 and self.getidlefolders():
            return 29*60
        else:
            return num

    def getsep(self):
        return self.imapserver.delim

    def gethost(self):
        """Return the configured hostname to connect to

        :returns: hostname as string or throws Exception"""
        if self._host:  # use cached value if possible
            return self._host

        # 1) check for remotehosteval setting
        if self.config.has_option(self.getsection(), 'remotehosteval'):
            host = self.getconf('remotehosteval')
            try:
                host = self.localeval.eval(host)
            except Exception, e:
                raise OfflineImapError("remotehosteval option for repository "\
                                       "'%s' failed:\n%s" % (self, e),
                                       OfflineImapError.ERROR.REPO)
            if host:
                self._host = host
                return self._host
        # 2) check for plain remotehost setting
        host = self.getconf('remotehost', None)
        if host != None:
            self._host = host
            return self._host

        # no success
        raise OfflineImapError("No remote host for repository "\
                                   "'%s' specified." % self,
                               OfflineImapError.ERROR.REPO)
开发者ID:rayners,项目名称:offlineimap,代码行数:98,代码来源:IMAP.py

示例6: IMAPRepository

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]
class IMAPRepository(BaseRepository):
    def __init__(self, reposname, account):
        """Initialize an IMAPRepository object."""

        BaseRepository.__init__(self, reposname, account)
        # self.ui is being set by the BaseRepository
        self._host = None
        self._oauth2_request_url = None
        self.imapserver = imapserver.IMAPServer(self)
        self.folders = None
        self.copy_ignore_eval = None

        # Only set the newmail_hook in an IMAP repository.
        if self.config.has_option(self.getsection(), 'newmail_hook'):
            self.newmail_hook = self.localeval.eval(
                self.getconf('newmail_hook'))

        if self.getconf('sep', None):
            self.ui.info("The 'sep' setting is being ignored for IMAP "
                         "repository '%s' (it's autodetected)"% self)

    def startkeepalive(self):
        keepalivetime = self.getkeepalive()
        if not keepalivetime: return
        self.kaevent = Event()
        self.kathread = ExitNotifyThread(target = self.imapserver.keepalive,
                                         name = "Keep alive " + self.getname(),
                                         args = (keepalivetime, self.kaevent))
        self.kathread.setDaemon(1)
        self.kathread.start()

    def stopkeepalive(self):
        if not hasattr(self, 'kaevent'):
            # Keepalive is not active.
            return

        self.kaevent.set()
        del self.kathread
        del self.kaevent

    def holdordropconnections(self):
        if not self.getholdconnectionopen():
            self.dropconnections()

    def dropconnections(self):
        self.imapserver.close()

    def get_copy_ignore_UIDs(self, foldername):
        """Return a list of UIDs to not copy for this foldername."""

        if self.copy_ignore_eval is None:
            if self.config.has_option(self.getsection(),
                                     'copy_ignore_eval'):
                self.copy_ignore_eval = self.localeval.eval(
                        self.getconf('copy_ignore_eval'))
            else:
                self.copy_ignore_eval = lambda x: None

        return self.copy_ignore_eval(foldername)

    def getholdconnectionopen(self):
        if self.getidlefolders():
            return 1
        return self.getconfboolean("holdconnectionopen", False)

    def getkeepalive(self):
        num = self.getconfint("keepalive", 0)
        if num == 0 and self.getidlefolders():
            return 29*60
        else:
            return num

    def getsep(self):
        """Return the folder separator for the IMAP repository

        This requires that self.imapserver has been initialized with an
        acquireconnection() or it will still be `None`"""
        assert self.imapserver.delim != None, "'%s' " \
            "repository called getsep() before the folder separator was " \
            "queried from the server"% self
        return self.imapserver.delim

    def gethost(self):
        """Return the configured hostname to connect to

        :returns: hostname as string or throws Exception"""
        if self._host:  # use cached value if possible
            return self._host

        # 1) check for remotehosteval setting
        if self.config.has_option(self.getsection(), 'remotehosteval'):
            host = self.getconf('remotehosteval')
            try:
                host = self.localeval.eval(host)
            except Exception as e:
                six.reraise(OfflineImapError,
                            OfflineImapError(
                                "remotehosteval option for repository "
                                "'%s' failed:\n%s"% (self, e),
                                OfflineImapError.ERROR.REPO),
#.........这里部分代码省略.........
开发者ID:ordnungswidrig,项目名称:offlineimap,代码行数:103,代码来源:IMAP.py

示例7: IMAPRepository

# 需要导入模块: from offlineimap.threadutil import ExitNotifyThread [as 别名]
# 或者: from offlineimap.threadutil.ExitNotifyThread import setDaemon [as 别名]
class IMAPRepository(BaseRepository):
    def __init__(self, reposname, account):
        """Initialize an IMAPRepository object."""
        BaseRepository.__init__(self, reposname, account)
        # self.ui is being set by the BaseRepository
        self._host = None
        self.imapserver = imapserver.IMAPServer(self)
        self.folders = None
        if self.getconf('sep', None):
            self.ui.info("The 'sep' setting is being ignored for IMAP "
                         "repository '%s' (it's autodetected)" % self)

    def startkeepalive(self):
        keepalivetime = self.getkeepalive()
        if not keepalivetime: return
        self.kaevent = Event()
        self.kathread = ExitNotifyThread(target = self.imapserver.keepalive,
                                         name = "Keep alive " + self.getname(),
                                         args = (keepalivetime, self.kaevent))
        self.kathread.setDaemon(1)
        self.kathread.start()

    def stopkeepalive(self):
        if not hasattr(self, 'kaevent'):
            # Keepalive is not active.
            return

        self.kaevent.set()
        del self.kathread
        del self.kaevent

    def holdordropconnections(self):
        if not self.getholdconnectionopen():
            self.dropconnections()

    def dropconnections(self):
        self.imapserver.close()

    def getholdconnectionopen(self):
        if self.getidlefolders():
            return 1
        return self.getconfboolean("holdconnectionopen", 0)

    def getkeepalive(self):
        num = self.getconfint("keepalive", 0)
        if num == 0 and self.getidlefolders():
            return 29*60
        else:
            return num

    def getsep(self):
        """Return the folder separator for the IMAP repository

        This requires that self.imapserver has been initialized with an
        acquireconnection() or it will still be `None`"""
        assert self.imapserver.delim != None, "'%s' " \
            "repository called getsep() before the folder separator was " \
            "queried from the server" % self
        return self.imapserver.delim

    def gethost(self):
        """Return the configured hostname to connect to

        :returns: hostname as string or throws Exception"""
        if self._host:  # use cached value if possible
            return self._host

        # 1) check for remotehosteval setting
        if self.config.has_option(self.getsection(), 'remotehosteval'):
            host = self.getconf('remotehosteval')
            try:
                host = self.localeval.eval(host)
            except Exception as e:
                raise OfflineImapError("remotehosteval option for repository "\
                                       "'%s' failed:\n%s" % (self, e),
                                       OfflineImapError.ERROR.REPO)
            if host:
                self._host = host
                return self._host
        # 2) check for plain remotehost setting
        host = self.getconf('remotehost', None)
        if host != None:
            self._host = host
            return self._host

        # no success
        raise OfflineImapError("No remote host for repository "\
                                   "'%s' specified." % self,
                               OfflineImapError.ERROR.REPO)


    def get_xoauth_access_token(self):
        return self.getconf('xoauth_access_token')
开发者ID:ojarva,项目名称:offlineimap,代码行数:95,代码来源:IMAP.py


注:本文中的offlineimap.threadutil.ExitNotifyThread.setDaemon方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。