首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无需等待即可调用函数

无需等待即可调用函数
EN

Stack Overflow用户
提问于 2012-07-13 10:44:40
回答 6查看 16.3K关注 0票数 13

嗨,我想知道是否有一种方法可以调用函数/方法(最好是在Python或Java中)并继续执行,而不需要等待它。

示例:

代码语言:javascript
运行
复制
def a():
    b()  #call a function, b()
    return "something"

def b():
    #something that takes a really long time
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-07-13 10:46:23

在新线程中运行它。了解java here和python多线程here中的多线程技术

Java示例:

走错了路。通过将Thread子类化

代码语言:javascript
运行
复制
new Thread() {
    public void run() {
        YourFunction();//Call your function
    }
}.start();

正确的方式。通过提供一个可运行的实例

代码语言:javascript
运行
复制
Runnable myrunnable = new Runnable() {
    public void run() {
        YourFunction();//Call your function
    }
}

new Thread(myrunnable).start();//Call it when you need to run the function
票数 25
EN

Stack Overflow用户

发布于 2012-07-13 11:26:07

正如在其他答案中所指出的,在Python中,你可以将函数放在一个新的线程中(不是很好,因为CPython中的线程不会给你带来太多好处),或者放在另一个使用多处理的进程中。

代码语言:javascript
运行
复制
from multiprocessing import Process

def b():
    # long process

def a():
    p = Process(target=b) 
    p.start()
    ...
a()

(如monkut的答案所示)。

但是Python的装饰器允许将样板隐藏在地毯下,在调用时,您只“看到”一个普通的函数调用。在下面的示例中,我创建了“并行”装饰器--只需将其放在任何函数之前,当被调用时,它将自动在一个单独的进程中运行:

代码语言:javascript
运行
复制
from multiprocessing import Process
from functools import partial

from time import sleep

def parallel(func):
    def parallel_func(*args, **kw):
        p = Process(target=func, args=args, kwargs=kw)
        p.start()
    return parallel_func

@parallel
def timed_print(x=0):
    for y in range(x, x + 10):
        print y
        sleep(0.2)



def example():
    timed_print(100)
    sleep(0.1)
    timed_print(200)
    for z in range(10):
        print z
        sleep(0.2)


if __name__ == "__main__":
    example()

当运行这段代码时,会得到:

代码语言:javascript
运行
复制
[gwidion@caylus Documents]$ python parallel.py 
100
0
200
101
1
201
102
2
202
103
3
203
104
4
204
105
5
205
106
6
206
107
7
207
108
8
208
109
9
209
[gwidion@caylus Documents]$ 
票数 6
EN

Stack Overflow用户

发布于 2012-07-13 10:55:19

在python中使用multiprocessing

代码语言:javascript
运行
复制
from multiprocessing import Process

def b():
    # long process

p = Process(target=b) 
p.start()
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11463456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档