我想编写一个简单的函数来异步发出一个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(),但不要阻止其余的代码等待它完成。
答案 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), ...])