[英]Python Multiprocessing queue.get() timeout when queue is not empty
[英]Python 3 - Multiprocessing - Queue.get() does not respond
我想进行蛮力攻击,因此需要一定的速度...所以我上来使用多处理库...但是,在我发现的每个教程中,都没有任何效果....嗯..一个人似乎工作得很好,除了我每次调用get()函数时,闲置似乎都会进入睡眠状态,并且它根本不响应。 我只是傻还是什么? 我只是复制粘贴了示例,所以它应该可以工作...。
import multiprocessing as mp
import random
import string
# Define an output queue
output = mp.Queue()
# define a example function
def rand_string(length, output):
""" Generates a random string of numbers, lower- and uppercase chars. """
rand_str = ''.join(random.choice(
string.ascii_lowercase
+ string.ascii_uppercase
+ string.digits)
for i in range(length))
output.put(rand_str)
# Setup a list of processes that we want to run
processes = [mp.Process(target=rand_string, args=(5, output)) for x in range(2)]
# Run processes
for p in processes:
p.start()
# Exit the completed processes
for p in processes:
p.join()
# Get process results from the output queue
results = [output.get() for p in processes]
print(results)
@dano撞上了头! 如果没有if __name__ == "__main__":
那么您就有一个“叉炸弹”。 也就是说,每个进程都在运行这些进程,依此类推。 您还将注意到,我已经移动了队列的创建。
import multiprocessing as mp
import random
import string
# define a example function
def rand_string(length, output):
""" Generates a random string of numbers, lower- and uppercase chars. """
rand_str = ''.join(random.choice(
string.ascii_lowercase
+ string.ascii_uppercase
+ string.digits)
for i in range(length))
output.put(rand_str)
if __name__ == "__main__":
# Define an output queue
output = mp.Queue()
# Setup a list of processes that we want to run
processes = [mp.Process(target=rand_string, args=(5, output)) for x in range(2)]
# Run processes
for p in processes:
p.start()
# Exit the completed processes
for p in processes:
p.join()
# Get process results from the output queue
results = [output.get() for p in processes]
print(results)
发生的事情是, multiprocessing
进程将每个子进程作为一个模块运行,因此__name__
在父__name__
中只是__main__
。 如果没有,则每个子进程将(尝试)启动两个以上的进程,每个进程将再启动两个,依此类推。 怪不得IDLE停下来。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.