Python多线程帮助

时间:2011-06-29 15:51:51

标签: python multithreading

我正在寻找从新线程中的另一个python脚本中调用python函数。 我有使用subprocess.Popen的经验,但我用它在命令行中调用.exe。有人建议如何使用它或使用模块吗?

def main(argv):
    call otherdef(1,2,3) in a new thread
    sleep for 10 minutes
    kill the otherdef process

def otherdef(num1, num2, num3):
    while(True):
        print num1

1 个答案:

答案 0 :(得分:3)

这是一个解决方案,但它不完全像你问的那样,因为它很复杂地杀了一个线程。最好让线程自行终止,所有线程默认为daemonic = False(除非它的父线程是守护进程),所以当主线程死掉时,你的线程就会存在。将它设置为true,它将与你的主线程一起消失。

基本上你要做的就是启动Thread并给它一个运行方法。您需要能够传递参数,以便您可以看到我传递args=参数,并将值传递给目标方法。

import time
import threading


def otherdef(num1, num2, num3):
    #Inside of otherdef we use an event to loop on, 
    #we do this so we can have a convent way to stop the process.

    stopped = threading.Event()
    #set a timer, after 10 seconds.. kill this loop
    threading.Timer(10, stopped.set).start()
    #while the event has not been triggered, do something useless
    while(not stopped.is_set()):
        print 'doing ', num1, num2, num3
        stopped.wait(1)

    print 'otherdef exiting'

print 'Running'
#create a thread, when I call start call the target and pass args
p = threading.Thread(target=otherdef, args=(1,2,3))
p.start()
#wait for the threadto finish
p.join(11)

print 'Done'    

目前还不清楚您是否需要流程或线程,但如果您需要Process导入多处理并将threading.Thread(切换为multiprocessing.Process(,则其他所有内容都保持不变。