通过泳池工人之间的变量?
我有一个两个过程的池。无限循环的过程#1。当进程#2中发生某些事情时,我需要在过程#1中停止无限循环。如何将信息从过程#1传递到进程#2?
def do_smth(value):
a = 0
if value == "1":
while 1:
time.sleep(0.5)
print("process_1", a)
if a == 10: break
if value == "2":
while a < 10:
time.sleep(0.5)
print("process_2", a)
a +=1
def make_a_pool(all):
with multiprocessing.Pool(processes=2) as pool:
pool.map(do_smth, all)
if __name__ == "__main__":
all = ["1", "2"]
make_a_pool(all)
I have a pool of 2 processes. Process #1 with infinite loop. I need to stop infinite loop in process #1 when something happens in process #2. How to pass info from process #1 to process #2?
def do_smth(value):
a = 0
if value == "1":
while 1:
time.sleep(0.5)
print("process_1", a)
if a == 10: break
if value == "2":
while a < 10:
time.sleep(0.5)
print("process_2", a)
a +=1
def make_a_pool(all):
with multiprocessing.Pool(processes=2) as pool:
pool.map(do_smth, all)
if __name__ == "__main__":
all = ["1", "2"]
make_a_pool(all)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您希望共享一个完整变量,而不仅仅是无限循环的停止条件,则可以使用
Multiprocessing.value()
。请记住,您必须以不同的方式初始化该值的初始化,因为多处理。Pool
不能传递无法腌制的同步原始图:输出:
我不需要使用任何锁定,因为只有一个过程更改值,否则,您需要使用
value.lock()
。If what you wish is to share a full variable, and not just a stop condition for an infinite loop, you may use
multiprocessing.Value()
. Keep in mind you have to initialize the value differently, asmultiprocessing.Pool
cannot pass around synchronization primitives that can't be pickled:Output:
I do not need to use any lock, as only one process changes the value, otherwise, you need to use
Value.lock()
.最简单的方法是使用。请记住,您必须以不同的方式初始化事件的初始化,因为
多处填写
不能传递无法腌制的同步映射:输出(您没有提前
a
onvalue ==“ 1”
):Simplest way is to use an
Event
. Keep in mind you have to initialize the event differently, asmultiprocessing.Pool
cannot pass around synchronization primitives that can't be pickled:Output (you didn't advance
a
onvalue=="1"
):