Thread.start() never returns! Could this have something to do with the C implementation of the math library?
注意:multiprocessing版本应该按原样工作:每个Python进程都有自己的GIL。在
factorial(1000000000)有数亿个数字。{asdummy}取而代之的是计算。在
如果在空闲状态下多线程代码有问题,请从命令行尝试相同的代码,以确保错误仍然存在。在
如果p.is_alive()在已调用p.start()之后返回False,则可能意味着f()函数中存在错误,例如MemoryError。在
在我的机器上,p.is_alive()返回True,如果我将问题中的代码粘贴到pythonshell中,其中一个cpu的值为100%。在
无关:删除通配符导入,如from multiprocessing import *。它们可能会隐藏代码中的其他名称,因此您无法确定给定名称的含义,例如,threading可以用类似但不同的语义定义{}函数(它没有,但可以),这些语义可能会无声地破坏代码。在I want my program to be able to handle ridiculous inputs from the user gracefully
如果将用户输入直接传递给eval(),则用户可以执行任何操作。在Is there any way to get a process to print, say, an error message without constructing a pipe or other similar structure?
这是一个普通的Python代码:print(message) # works
不同的是,如果多个进程运行print(),那么输出可能会被混淆。您可以使用锁来同步print()调用。在