我已经读了很多关于python处理的文章,但是我似乎不知道如何同时运行两个方法/进程。这是我的代码,它在一个名为超级测试.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()
我尝试过运行线程、进程和所有东西,但出于某种原因,我在输出中得到的只是:
^{pr2}$我想在控制台上打印这样的东西
printFiveCalled
printTenCalled
printTenCalled
printFiveCalled
printTenCalled
printTenCalled
接近!我认为问题来自于你的
target
中的括号:然后是线程和多处理之间的区别。对于多处理,您将同时使用计算机的多个核心(1/process是理想的)。但是,python线程不是真正的多线程,因为全局解释器锁将禁止多个线程同时运行。在
结论:线程是串行运行的,进程是并行运行的。 当部分计算不是用Python完成时,线程是很有用的。i、 e.当使用numpy、OpenCV。。。交换到C的库
多处理的最后一点:使用它最简单的方法是创建1个函数,该函数执行大量计算,并且需要在多个输入上运行。然后,可以使用
^{pr2}$Pool()
和map()
。在注意:对于线程,我很欣赏使用
multiprocessing.dummy
,它的工作原理与multiprocessing
完全相同,但与线程一起使用。在我注意到的第一件事是目标应该是一个函数,这意味着您传递函数(
target=foo
),而不是传递函数返回的内容(target=foo()
)。在使用线程接口,可以很容易地创建两个踏板,每个踏板运行一个函数,并获得预期的输出。在
输出:
^{pr2}$此外,如果要将参数传递给目标,可以使用
args
和kwargs
关键字。在例如
threading.Thread(target=print_some_num_some_times, args=(5,), kwargs={'times': 10})
相关问题 更多 >
编程相关推荐