2016-02-12 139 views
2

我想单独运行一个函数。从我调用的函数中,我希望返回而不必等待其他函数结束。背景中的Python函数

我尝试过threadind,但是这会等待,结束。

thread = threading.Thread(target=myFunc) 
thread.daemon = True 
thread.start() 
return 'something' 

是否可以立即返回并且其他进程仍在运行? 感谢您的答复。

EDITED 工作的代码如下所示:

import concurrent.futures 
executor = concurrent.futures.ThreadPoolExecutor(2) 
executor.submit(myFunc, arg1, arg2) 
+0

这段代码是否在另一个函数中作为内联函数使用? (在'thread'完成之前结束的那个) –

+0

这是一个Django视图函数,我想在结束被调用的函数之前重定向,但是这个等待。 –

+0

您必须将该功能卸载到另一个线程。你运行的是在同一个线程上工作。 –

回答

1

,如果我理解正确你的要求,你可能要采取的工人队列 https://www.djangopackages.com/grids/g/workers-queues-tasks/

一看基本上它是不卸载一个好主意线程创建的工作,通常通过拥有后台工作者(进程,线程)池和传入请求的队列来处理。

+0

谢谢,与此我得到执行者。 工作的代码如下所示: 进口concurrent.futures 执行人= concurrent.futures.ThreadPoolExecutor(2) executor.submit(myFunc的,ARG1,ARG2) –

0

我认为你使用的语法是正确的,我不明白为什么你的请求不应该立即返回。您是否确认请求实际挂起,直到线程结束?

我建议设置myFunc写入到文件以供您跟踪此

def myFunc(): 
    f = open('file.txt', 'w') 
    while True: 
     f.write('hello world') 
1

你都或多或少提出以下问题:

Is it possible to run function in a subprocess without threading or writing a separate file/script

你必须改变来自链接的示例代码如下:

from multiprocessing import Process 

def myFunc(): 
    pass # whatever function you like 

p = Process(target=myFunc) 
p.start() # start execution of myFunc() asychronously 
print)'something') 

p.start()是异步执行的,即不管myFunc()的执行耗费多少时间,都立即打印出'something'。该脚本执行myFunc()并且不等待它完成。