制作单独的异步发布请求

时间:2017-05-02 17:37:02

标签: python

我想编写一个简单的函数来异步发出一个post请求。如果它在2.7和3.x上运行会很棒,但是我只需要在3.x上工作就可以了。我找不到要做的事情。我发现的所有示例都是获取请求,并且它将许多请求捆绑在一起。我只想要:

def fun1(self, arg1, arg2, ...):
    ... #construct payload from args
    return requests.post("myurl", data=payload) #takes 10 seconds

def fun2(self, arg1, arg2, ...):
    ... #construct payload from args
    return requests.post("some other url", data=payload) #takes 20 seconds

def main():
   # do some stuff
   fun1("foo")
   # do some other stuff immediately 
   fun2("bar")

这实际上可行吗?我只想调用fun1(),但不要阻止其余的代码等待它完成。

1 个答案:

答案 0 :(得分:0)

通常的做法是使用multiprocessing模块运行一个包含进程池的函数。

引言显示了这个简单的例子:

from multiprocessing import Pool

def f(x):
     return x*x

if __name__ == '__main__':
     p = Pool(5)
     print(p.map(f, [1, 2, 3]))

将打印到标准输出::

[1, 4, 9]

对于你的问题,你可以这样写:

p.map(requests.post, [("myurl", data...), ("myurl2", data), ...])