评论显示OP使用Windows以及Spyder.由于Spyder重定向stdout并且Windows不支持
forking,因此新的子进程将无法打印到Spyder控制台.这只是因为新子进程的stdout是Python的vanilla stdout,它也可以在sys .__ stdout__中找到.
有两种选择:
>使用logging模块.这将包括创建所有消息并将其记录到一个或多个文件.使用单个日志文件可能会导致输出稍微出现问题,因为进程会同时写入文件.每个进程使用一个文件可以解决这个问题.
>不在子进程中使用print,而只是将结果返回到主进程.通过使用queue(或multiprocessing.Manager().Queue(),因为无法分叉)或更简单地依靠multiprocessing Pool’s地图功能,请参阅下面的示例.
带池的多处理示例:
import multiprocessing
def worker(num):
"""Returns the string of interest"""
return "worker %d" % num
def main():
pool = multiprocessing.Pool(4)
results = pool.map(worker, range(10))
pool.close()
pool.join()
for result in results:
# prints the result string in the main process
print(result)
if __name__ == '__main__':
# Better protect