He *_*ing 7 python process multiprocessing python-3.x python-multiprocessing
我在 Python 3.6 中进行了以下进程间通信设置:
from multiprocessing.managers import BaseManager
class MyManager(BaseManager): pass
MyManager.register('get_instance', callable=lambda:my_instance)
m = MyManager(address=('', 50000), authkey=b'key')
s = m.get_server()
s.serve_forever()
Run Code Online (Sandbox Code Playgroud)
为了避免阻塞较大应用程序的消息循环,我使用了一个线程来包含此设置。所以s.serve_forever()
实际上是在run
一个线程的函数内部运行的。
这是根据文档完成的。而且设置本身可以很好地与调用共享实例的客户经理一起使用。
然而,我发现没有办法停止这个“serve_forever”服务器。由于文档没有提到这一点,所以我检查了源代码。据说stop_event
我可以set
退出循环。但它不起作用,因为accepter
守护进程/线程仍在运行。我无法调用shutdown
服务器对象,因为我没有套接字对象c
。
那么我该如何关闭这个服务器呢?
附:使用BaseManager.start()
对我来说并不是一个真正的选择,因为在我的例子中,服务器共享一个只能由启动进程访问的异步消息循环。BaseManager.start()
产生一个不再有权访问消息循环的新进程。get_server().serve_forever()
另一方面,在调用进程内运行。
您可以包装/使用管理器启动/关闭来避免服务器永远运行(start() 为您启动服务器):
m = MyManager(address=('', 50000), authkey=b'key')
m.start()
# do something
m.shutdown()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3692 次 |
最近记录: |