Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在使用线程向不同网站发出GET请求和POST请求时遇到问题_Python_Multithreading - Fatal编程技术网

Python 在使用线程向不同网站发出GET请求和POST请求时遇到问题

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 = {

我想创建一个脚本,在一个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 = {'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
吗?