包装函数以在单独的线程/进程中运行。
remoteit的Python项目详细描述
远程IT
具有concurrent.futures
类型接口的超级基本多处理/多线程处理。在
安装
pip install remoteit
使用
^{pr2}$描述和动机
这与concurrent.futures
的区别在于:
- 这是一个单一的工作进程
- 它每次都会分叉一个新的过程。在
我之所以这样做而不只是使用concurrent.futures
,是因为当我试图提交一个引用队列对象的作业时,遇到了一个错误,即某些对象如何只能通过继承共享。在
所以我又回到了使用multiprocessing.Process
,但是传递和引发远程异常是一件非常痛苦的事情,也是我自己解决和解决的问题。所以我决定这将是我最后一次思考如何实现这种信息传递。在
这个包基本上是multiprocessing.Process
和threading.Thread
的一个薄包装,它将返回结果并从远程工作进程引发任何异常。超级简单!在
注意事项和注意事项
Future
对象只能由单个进程使用。
- 目前,我处理多个并发的futures+结果,方法是生成一个随机的id,并在结果旁边返回id。在
- 然后,如果另一个future得到了一个与它的result_id不匹配的结果,它将把它放入一个results dictionary中,由其他futures检查它们的result_id。在
- 但问题是,进程之间没有共享字典,因此,如果您在两个不同的进程中从结果队列中读取项,则会导致死锁,因为一个进程可能会从队列中弹出另一个进程结果,而将来将永远看不到它的结果。在
- 如果有人对如何在不增加太多开销的情况下解决这个问题有任何想法,请发布一个问题!!在
缺少接口
fut.cancel()
-正在取消任务。我们不处理取消的结果fut.result(timeout)
-我们没有结果超时atm。在fut.add_done_callback()
-我们没有运行结果的监视线程。现在最好打电话给future.result()
- 项目
标签: