python - 同时处理 Python
问题描述
我一直在阅读很多关于 python 处理的内容,但我似乎无法弄清楚如何同时运行两个方法/进程。这是我的代码,它位于一个名为 supertest.py 的文件中,我从控制台运行该文件:
import threading
import time
import multiprocessing
def printFive():
for i in range(5):
print 'printFiveCalled'
time.sleep(1)
def printTen():
for i in range(10):
print 'printTenCalled'
time.sleep(0.5)
if __name__ == "__main__":
p1 = multiprocessing.Process(name = 'p1', target = printFive())
p2 = multiprocessing.Process(name = 'p2', target = printTen())
p1.start()
p2.start()
我尝试过运行线程、进程和所有内容,但由于某种原因,我在输出中得到的只是:
printFiveCalled
printFiveCalled
printFiveCalled
printFiveCalled
printFiveCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
printTenCalled
我想在控制台上打印这样的东西
printFiveCalled
printTenCalled
printTenCalled
printFiveCalled
printTenCalled
printTenCalled
解决方案
关!我认为问题出在您的括号中target
:
import time
import multiprocessing as mp
import os
def printFive():
for i in range(5):
print ('printFiveCalled')
time.sleep(1)
def printTen():
for i in range(10):
print ('printTenCalled')
time.sleep(0.5)
if __name__ == "__main__":
p1 = mp.Process(target = printFive)
p2 = mp.Process(target = printTen)
p1.start()
p2.start()
p1.join()
p2.join()
os.system("pause")
然后是线程和多处理之间的区别。使用多处理,您将同时使用计算机的多个内核(1 个/进程是理想的)。但是,python 线程不是真正的多线程,因为全局解释器锁将禁止同时运行多个线程。
结论:线程是串行运行的,进程是并行运行的。当部分计算不在 Python 中完成时,线程很有用。即当使用 numpy、OpenCV、... 库交换到 C 时。
多处理的最后一点:使用它的最简单方法是创建 1 个函数,该函数进行大量计算并且需要在多个输入上运行。然后,可以使用aPool()
和 a 。map()
if __name__ == "__main__":
with mp.Pool(processes = N) as p:
# Function with 1 argument:
p.map(f, inputs)
# Function with multiple arguments:
p.starmap(f, [(arg1, arg2) for arg1 in input1 for arg2 in input2])
注意:对于线程,我欣赏的一种方式是使用它与线程multiprocessing.dummy
完全一样工作。multiprocessing
推荐阅读
- css - 如何通过css使用/访问斜体替代字体字母?
- xamarin - 需要在 Dev Express Xamarin 表单中将月份视图显示为“1 Sep”
- database - 如何在 DBeaver 中设置自动连接 .csv 文件的数据类型?
- php - 在 Wordpress 的自定义模板中显示自定义帖子
- python - 将安全组设置为 ALB aws
- python - 如何使用正则表达式查找一个字符超过 1 次?
- google-sheets - Arrayformula 计算动态偏移范围的总和
- c - 是否可以在#define 中有这么多值,如果可以,为什么这段代码不起作用
- python - 使用 dash_cytoscape line-gradient-stop-colors
- c++ - 什么时候用固定索引宏填充数组比增加索引更好?