【发布时间】:2017-03-28 21:22:17
【问题描述】:
我正在使用基于事件的系统,该系统使用新的 Python 3.5 协程和等待。我注册事件,这些事件被系统调用。
@event
aysnc def handleevent(args):
# handle the event
我需要初始化一些类来处理工作(耗时)。然后调用实例方法,同样耗时(它们实际上使用 selenium 来浏览某些网站)。
理想情况下,我想要类似下面的代码
# supposedly since this is multiprocessing this is a different driver per process
driver = None
def init():
# do the heavy initialization here
global driver
driver = webdriver.Chrome()
def longworkmethod():
## need to return some data
return driver.dolongwork()
class Drivers:
""" A class to handle async and multiprocessing"""
def __init__(self, numberOfDrivers):
self.pool = multiprocessing.Pool(processes=numberOfDrivers, initializer=init)
async def dowork(self, args):
return self.pool.apply_async(longworkmethod, args=args)
### my main python class
drivers = Drivers(5)
@event
aysnc def handleevent(args):
await drivers.dowork(args)
@event
aysnc def quit(args):
## do cleanup on drivers
sys.exit(0)
此代码不起作用,但我尝试了许多不同的方法,但似乎没有一个能够做我想做的事。
它不必是这种精确的形式,但是我如何将 await 和 coroutines 与需要多处理的程序混合?
【问题讨论】:
标签: python selenium async-await multiprocessing python-3.5