Python 在使用线程向不同网站发出GET请求和POST请求时遇到问题
我想创建一个脚本,在一个while循环中使用20个线程,在一个网站上发出GET请求,然后发布到另一个网站 我尝试过线程模块,但不知道如何使其运行 有人能帮我理解python上多线程是如何工作的吗?下面是代码Python 在使用线程向不同网站发出GET请求和POST请求时遇到问题,python,multithreading,Python,Multithreading,我想创建一个脚本,在一个while循环中使用20个线程,在一个网站上发出GET请求,然后发布到另一个网站 我尝试过线程模块,但不知道如何使其运行 有人能帮我理解python上多线程是如何工作的吗?下面是代码 import urllib2,requests c = 0 while c<100: c=c+1 first = urllib2.urlopen("http://numbersapi.com/"+str(c)+"/math").read() second = {
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
导入urllib2,请求
c=0
而c看起来您正在使用Python2。我建议您安装futures
包表单PYPI
。那么这将是一种方式(顺便说一句,您似乎没有对第二个请求的结果做任何事情)
您可能会发现返回结果更方便,而不是打印结果。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
看起来您正在使用Python2。我建议您安装futures
包表单PYPI
。那么这将是一种方式(顺便说一句,您似乎没有对第二个请求的结果做任何事情)
您可能会发现返回结果更方便,而不是打印结果。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
@MauriceMeyer抱歉第一次使用此网站时,我编辑了此帖子以使其更清晰。您可以在代码中使用twisted
吗?@MauriceMeyer抱歉第一次使用此网站时,我编辑了此帖子以使其更清晰。您可以在代码中使用twisted
吗?