我想在子进程中限制资源访问.例如 - 限制http下载,磁盘io等.我如何实现它扩展这个基本代码?
请分享一些基本的代码示例.
pool = multiprocessing.Pool(multiprocessing.cpu_count())
while job_queue.is_jobs_for_processing():
for job in job_queue.pull_jobs_for_processing:
pool.apply_async(do_job, callback = callback)
pool.close()
pool.join()
Run Code Online (Sandbox Code Playgroud) 我正在使用这样的Python 3序列:
lock = threading.Lock()
res = lock.acquire(timeout=10)
if res:
# do something ....
lock.release()
else:
# do something else ...
Run Code Online (Sandbox Code Playgroud)
我更喜欢使用with语句而不是显式的"获取"和"释放",但我不知道如何获得超时效果.
我有一段代码
locked = lock.acquire(False)
if locked: break
Run Code Online (Sandbox Code Playgroud)
根据 python 文档:
lock.aquire(False):- 当调用阻塞参数设置为 False 时,不阻塞。如果将阻塞设置为 True 的调用会阻塞,则立即返回 False;否则,将锁设置为锁定并返回 True。
我很理解他们所说的,但有人可以简化这一点,并请解释我与上述代码的关系。
下面的代码按我期望的方式工作,即:
要做到这一点,我不得不将1秒钟的睡眠分解为50毫秒的块状物来检查旗帜.
是否有更多的Pythonic方式在线程中睡眠一段时间(例如1秒)但是可以通过某些标志或信号中断?
try:
for i in xrange(8):
print "i=%d" % i
for _ in xrange(20):
time.sleep(0.05)
if not self.running:
raise GracefulShutdown
except GracefulShutdown:
print "ernie exiting"
Run Code Online (Sandbox Code Playgroud)
我宁愿这样做,并在某种程度上导致线程中的GracefulShutdown异常:
try:
for i in xrange(8):
print "i=%d" % i
time.sleep(1)
# somehow allow another thread to raise GracefulShutdown
# during the sleep() call
except GracefulShutdown:
print "ernie exiting"
Run Code Online (Sandbox Code Playgroud)
全程;
from PySide import QtCore, QtGui
from PySide.QtGui import QApplication
import sys
import signal
import time
class GracefulShutdown(Exception):
pass
class …Run Code Online (Sandbox Code Playgroud) 在Java中,tryLock(很长时间,TimeUnit单位)可以用作获取锁的非阻塞尝试。如何实现python中的等效功能?(Pythonic | 惯用方式是首选!)
Java tryLock:
ReentrantLock lock1 = new ReentrantLock()
if (lock1.tryLock(13, TimeUnit.SECONDS)) { ... }
Run Code Online (Sandbox Code Playgroud)
Python锁:
import threading
lock = Lock()
lock.acquire() # how to lock.acquire(timeout = 13) ?
Run Code Online (Sandbox Code Playgroud)