本文整理匯總了Python中gevent.spawn_later方法的典型用法代碼示例。如果您正苦於以下問題:Python gevent.spawn_later方法的具體用法?Python gevent.spawn_later怎麽用?Python gevent.spawn_later使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類gevent
的用法示例。
在下文中一共展示了gevent.spawn_later方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。
示例1: handle_connection_failure
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def handle_connection_failure(self, conn):
del self._connections[conn]
conn.close_stream()
if not self.is_running:
return
self.redistribute_ready_state()
if str(conn) not in self.nsqd_tcp_addresses:
return
seconds = self._connection_backoffs[conn].failure().get_interval()
self.logger.debug('[%s] retrying in %ss', conn, seconds)
gevent.spawn_later(
seconds, self.connect_to_nsqd, conn.address, conn.port)
示例2: _clean_local_backup
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def _clean_local_backup(local_backup_file, g):
def _safe_remove(path):
LOG.info('Removing backup {}'.format(local_backup_file))
try:
os.remove(path)
except:
pass
if g.value != 0:
_safe_remove(local_backup_file)
return
LOG.info('Removing backup {} in 300s'.format(local_backup_file))
gevent.spawn_later(300, _safe_remove, local_backup_file)
# XXX this should be moved to a different endpoint
示例3: __call__
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def __call__(self, *args, **kwargs):
now = utc_millisec()
remaining = self.wait - (now - self._previous)
if self._cancelled:
return
if remaining <= 0 or remaining > self.wait:
if self._timeout is not None:
self._timeout.join(timeout=5)
self._timeout = None
self._previous = now
self.f(*args, **kwargs)
elif self._timeout is None:
self._args = args
self._kwargs = kwargs
self._timeout = gevent.spawn_later(remaining/1000.0, self.later)
else:
self._args = args
self._kwargs = kwargs
示例4: start
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def start(self):
super(BasePollerFT, self).start()
if self._actor_glet is not None:
return
self._actor_glet = gevent.spawn(
self._actor_loop
)
self._poll_glet = gevent.spawn_later(
random.randint(0, 2),
self._poll_loop
)
self._age_out_glet = gevent.spawn(
self._age_out_loop
)
示例5: set
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def set(self, interval, callback, repeat=False, force=True):
"""
添加timer
"""
if self.timer:
if force:
# 如果已經存在,那麽先要把現在的清空
self.clear()
else:
# 已經存在的話,就返回了
return
def callback_wrapper():
# 必須要確定,這次調用就是這個timer引起的
if self.timer == timer:
# 必須加這句,否則如果在callback中有clear操作,會出現GreenletExit
self.timer = None
# 不可以加 timer = None,否則會導致判斷self.timer == timer 報錯找不到timer
result = safe_call(callback)
if repeat and not self.timer:
# 之所以還要判斷timer,是因為callback中可能設置了新的回調
self.set(interval, callback, repeat, True)
return result
self.timer = timer = gevent.spawn_later(interval, callback_wrapper)
示例6: handle_incoming_call
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def handle_incoming_call(self, caller_username, backend_server_url):
if self.videocall_user is None:
raise JanusCloudError('Register a username first', JANUS_VIDEOCALL_ERROR_REGISTER_FIRST)
if self.videocall_user.incall:
raise JanusCloudError('User {} busy'.format(self.videocall_user.username), JANUS_VIDEOCALL_ERROR_ALREADY_IN_CALL)
self.videocall_user.incall = True
self.videocall_user.peer_name = caller_username
self.videocall_user.utime = time.time()
try:
self._connect_backend(backend_server_url)
self._plugin.user_dao.update(self.videocall_user)
except Exception:
self._disconnect_backend()
self.videocall_user.peer_name = ''
self.videocall_user.incall = False
raise
# if incoming_call event cannot be received in INCOMMING_CALL_TIMEOUT(10) seconds,
# auto disconnect the backend server
if self._auto_disconnect_greenlet is None:
self._auto_disconnect_greenlet = gevent.spawn_later(INCOMMING_CALL_TIMEOUT, self._auto_disconnect_routine)
示例7: _keepalive_routine
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def _keepalive_routine(self):
gevent.sleep(self._keepalive_interval)
keepalive_msg = create_janus_msg('keepalive')
while self.state == BACKEND_SESSION_STATE_ACTIVE:
try:
# if there is no handle existed and auto destroy is enabled, just schedule the destroy route
if not self._handles:
if self._auto_destroy and self._auto_destroy_greenlet is None:
self._auto_destroy_greenlet = gevent.spawn_later(self._auto_destroy, self._auto_destroy_routine)
self.send_request(keepalive_msg, ignore_ack=False)
except Exception as e:
log.exception('Keepalive failed for backend session {}'.format(self.url))
self.destroy()
else:
gevent.sleep(self._keepalive_interval)
示例8: refresh_cache
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def refresh_cache():
global ROLES
refresh_rate = settings.BACKGROUND_CACHE_IAM_ROLE_REFRESH_RATE
if settings.BACKGROUND_CACHE_IAM_ROLE_REFRESH_RATE < 60:
refresh_rate = 60
try:
logger.info('Refreshing IAM roles cache.')
ROLES = _get_iam_roles()
except Exception:
logger.exception(
'Failed to update IAM roles cache.',
exc_info=True
)
finally:
# +/- 20ish seconds for respawn, to ensure all processes do not
# refresh at the same time
random_refresh_rate = random.randrange(
refresh_rate - 20,
refresh_rate + 20
)
return gevent.spawn_later(
random_refresh_rate,
refresh_cache
)
示例9: testPoolJoin
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def testPoolJoin(self):
with create_actor_pool(address=True, n_process=2, distributor=AdminDistributor(2),
backend='gevent') as pool:
start = time.time()
pool.join(0.2)
self.assertGreaterEqual(time.time() - start, 0.2)
start = time.time()
gevent.spawn_later(0.2, lambda: pool.stop())
pool.join()
self.assertGreaterEqual(time.time() - start, 0.2)
示例10: handle_connection_failure
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def handle_connection_failure(self, conn):
conn.close_stream()
self._clear_responses(conn, NSQException('connection closed'))
if not self.is_running:
return
seconds = self._connection_backoffs[conn].failure().get_interval()
self.logger.debug('[%s] retrying in %ss', conn, seconds)
gevent.spawn_later(
seconds, self.connect_to_nsqd, conn.address, conn.port)
示例11: _start_backoff
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def _start_backoff(self, conn):
self._connections[conn] = BACKOFF
interval = self._message_backoffs[conn].get_interval()
gevent.spawn_later(interval, self._start_throttled, conn)
self.logger.info('[%s] backing off for %s seconds', conn, interval)
self.redistribute_ready_state()
示例12: set_timer
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def set_timer(self, t, f, *args, **kw):
timer = None
def wrapper():
self._timers.discard(timer)
f(*args, **kw)
timer = spawn_later(t, wrapper)
self._timers.add(timer)
return timer
示例13: start
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def start(self):
super(PanOSLogsAPIFT, self).start()
if self.glet is not None:
return
self.glet = gevent.spawn_later(random.randint(0, 2), self._run)
for idx in range(len(self.fields)):
self.age_out_glets.append(
gevent.spawn(self._age_out_loop, idx)
)
示例14: start
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def start(self):
super(DagPusher, self).start()
if self.device_list_glet is not None:
return
self.device_list_glet = gevent.spawn_later(
2,
self._device_list_monitor
)
if self.age_out_interval is not None:
self.ageout_glet = gevent.spawn(self._age_out_run)
示例15: start
# 需要導入模塊: import gevent [as 別名]
# 或者: from gevent import spawn_later [as 別名]
def start(self):
super(TestMiner, self).start()
self._glet = gevent.spawn_later(
2,
self._run
)