Python 多处理连续处理与等待



我正在使用使用新的Python 3.5协程的基于事件的系统并等待。我注册事件,这些事件由系统调用。

@event
aysnc def handleevent(args):
    # handle the event

我需要初始化一些类来处理工作(耗时(。然后调用实例方法,也很耗时(它们实际上使用硒来浏览某些站点(。

理想情况下,我想要类似以下代码的内容

# 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)

这段代码不起作用,但我尝试了很多不同的方法,似乎没有一种能够做我想做的事。

它不一定是这种确切的形式,但是我如何将等待和协程与需要多处理的程序混合在一起?

虽然从技术上讲没有什么可以限制你混合asynciomultiprocessing,但我建议避免这样做。这将增加很多复杂性,因为您最终需要每个线程一个事件循环,并且来回传递信息将很棘手。只需使用其中一个。

asyncio提供用于在另一个线程中运行任务的函数 - 例如AbstractEventLoop.run_in_executor 。看看这些答案

  • https://stackoverflow.com/a/33025287/66349(在协程中调用硒(
  • https://stackoverflow.com/a/28492261/66349

或者你可以只使用multiprocessing因为 selenium 有一个阻塞(非异步(接口,但听起来你的一些代码已经在使用 asyncio所以也许坚持上面的。

相关内容

  • 没有找到相关文章

最新更新