我试图在两个函数上同时运行两个线程,如下面列出的那样:
import threading
def functionA():
for i in range(5):
print "Calling function A"
def functionB():
for i in range(5):
print "Calling function B"
t1 = threading.Thread(functionA())
t2 = threading.Thread(functionB())
t1.start()
t2.start()
结果:
调用功能A. 调用功能A. 调用功能A. 调用功能A. 调用功能A. 调用功能B. 调用功能B. 调用功能B. 调用功能B. 调用函数B
但不幸的是,经过多次尝试。我无法得到结果
期望的结果:
调用功能A. 调用功能B. 调用功能A. 调用功能B. 调用功能A. 调用功能B. 调用功能A. 调用功能B. 调用函数A
有人可以引导我,以便两个线程可以同时运行并产生所需的结果。提前谢谢。
答案 0 :(得分:2)
你调用函数并将结果传递给Thread
构造函数而不是传递函数。此外,您必须使用target
参数(而不是先出现的未使用的group
)。只需使用Thread(target=functionA)
和Thread(target=functionB)
即可。注意功能之后缺少parens。
请注意,您仍然不会在CPython中获得多线程,但这是一个不同的问题。
答案 1 :(得分:1)
@delnan已经回答了如何正确使用Thread,所以我将专注于你想要的输出。
您很可能无法获得所需的输出。线程执行的时间不能保证,特别是在Python中。操作系统调度可以影响每个线程何时运行。当你运行这样的两个线程时,你实际上是在说“这两件工作不依赖于彼此的顺序而且可以同时运行”。
你可以得到这样的输出:
a,a,b,b,a,a,b,b,a,b
或者:
a,b,b,b,b,b,a,a,a,a
每次执行程序时都会改变。不要依赖线程执行的顺序!
Python中的线程是一种危险的野兽。没有两个线程在Python中同时运行。阅读Global Interpret Lock了解更多信息。
答案 2 :(得分:0)
您正在编写一个新线程,操作系统负责线程如何使用处理器。这就是为什么排序不规律的原因。您应该使用另一个变量来定义哪个函数已经转动。但还是个坏主意。
答案 3 :(得分:0)
如果发布python 3.2会很好,因为查看下面的链接,内置的库可以帮助我实现目标。
http://docs.python.org/dev/library/concurrent.futures.html
但是,他们会考虑其他有用的成员提供的替代方案。感谢您再次提供的帮助。