2011-02-11 84 views
0

我想在两个功能类似下面列出的运行两个线程并发:Python的问题

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 呼叫功能B 呼叫功能B 呼叫功能B 呼叫功能B 调用函数B

但不幸的是经过多次尝试。我无法得到的结果

所期望的结果:

调用函数的 调用函数B 调用函数的 调用函数B 调用函数的 调用函数B 调用函数的 调用函数B 调用函数A

有人可以指导我,以便两个线程可以同时并发运行并产生期望的结果。提前致谢。

回答

2

你是调用函数并将结果传递给Thread构造函数而不是传递函数。此外,您必须使用target参数(而不是先使用的未使用的group)。只需使用Thread(target=functionA)Thread(target=functionB)即可。注意函数之后缺少parens。

请注意,您仍然不会在CPython中获得多线程,但这是一个不同的问题。

+0

感谢您的意见和帮助。 – abduls85 2011-02-11 14:55:12

1

@delnan已经回答了如何正确使用线程,所以我将关注你想要的输出是什么。

您很可能无法得到您想要的所需输出。无法保证线程执行的时间,特别是在Python中。操作系统调度可能会影响每个线程运行的时间。当像这样运行两个线程时,你实际上是在说“这两部分工作不依赖于彼此的顺序并且可以同时运行”。

你可以得到的输出是这样的:

a,a,b,b,a,a,b,b,a,b 

或者:

a,b,b,b,b,b,a,a,a,a 

它会改变你的程序的每次执行。不要依赖线程执行的顺序!

Python中的线程是一个危险的野兽。没有两个线程在同一时间内在Python中运行。请阅读全球口译锁以了解更多信息。

+0

感谢您的意见和帮助。 – abduls85 2011-02-11 14:57:10

0

您正在编写一个新线程,操作系统负责线程如何使用处理器。这就是为什么排序不规律。你应该使用另一个变量来定义哪个函数已经转向。但还是一个坏主意。