gpt4 book ai didi

python - 使用线程向不同网站发出 GET 请求然后发出 POST 请求时遇到问题

转载 作者:太空宇宙 更新时间:2023-11-03 20:12:02 29 4
gpt4 key购买 nike

我想创建一个脚本,该脚本在 while 循环中使用 20 个线程,并在网站上发出 GET 请求,然后 POST 到另一个网站。

我尝试过线程模块,但我不知道如何让它运行。

有人可以帮助我理解多线程在 python 上的工作原理吗?下面是代码。

import urllib2,requests
c = 0
while c<100:
c=c+1
first = urllib2.urlopen("http://numbersapi.com/"+str(c)+"/math").read()
second = {'Tip':first}
r = requests.post(url = "http://wwww.mywebsite.com/api.php", data=second).content
print first

最佳答案

看来您正在使用 Python 2。我建议您安装 PYPI 形式的 futures 包。那么这将是一种方法(顺便说一句,您似乎没有对第二个请求的结果执行任何操作)。

from concurrent.futures import ThreadPoolExecutor
import urllib2, requests

def get_it(c):
first = urllib2.urlopen("http://numbersapi.com/"+str(c)+"/math").read()
second = {'Tip':first}
r = requests.post(url = "http://wwww.mywebsite.com/api.php", data=second).content
print first

with ThreadPoolExecutor(max_workers=20) as executor:
for i in range(100):
executor.submit(get_it, i)

您可能会发现返回结果更方便,而不是打印结果。 submit 方法返回 Future 对象,可以测试该对象是否完成,并可以从中提取返回值:

from concurrent import futures
import urllib2, requests

def get_it(c):
first = urllib2.urlopen("http://numbersapi.com/"+str(c)+"/math").read()
second = {'Tip':first}
r = requests.post(url = "http://wwww.mywebsite.com/api.php", data=second).content
return first

with futures.ThreadPoolExecutor(max_workers=20) as executor:
the_futures = [executor.submit(get_it, i) for i in range(100)]
for future in futures.as_completed(the_futures):
print future.result()

如果您希望结果按照提交请求的顺序排列,则:

from concurrent import futures
import urllib2, requests

def get_it(c):
first = urllib2.urlopen("http://numbersapi.com/"+str(c)+"/math").read()
second = {'Tip':first}
r = requests.post(url = "http://wwww.mywebsite.com/api.php", data=second).content
return first

with futures.ThreadPoolExecutor(max_workers=20) as executor:
for result in executor.map(get_it, range(100)):
print result

关于python - 使用线程向不同网站发出 GET 请求然后发出 POST 请求时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58659457/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com