Rumah  >  Soal Jawab  >  teks badan

python 2.7 如何实现http post多并发?

注意是python 2.7, (multiprocessing值支持到2.6,2.7下安装会报错)

用threadpool试了一下,总是报错:

单次并发的函数

data = ['a', 'b', 'c']
#data传到threadpool.makeRequests里面的第二个参数,函数会将这个列表里面的值取出来,然后根据并发数进行并发。
def repost(data):
    response = requests.post(url, data).text
    return response

结果处理函数,只是打印出来

def postresult(requestself, responseresult):
    print(responseresult)
    #其他的处理,比如对结果插入到数据库,或者写入日志等,可以在这里写

pool = threadpool.ThreadPool(5)
requests = threadpool.makeRequests(repost, data, postresult)
**#之前出问题,是因为这里requests的名称定义和requests()方法冲突了。。。然后报错又很奇怪,没引起注意,把这里的requests改个名字就OK了。各位,承让了。
当然,下面这一样,也改一下。requests的名称。
[pool.putRequest(req) for req in requests]
pool.wait()

报错如下:

Traceback (most recent call last):
  File "C:\User\AppData\Local\Programs\Python\Python35-32\lib\site-packages\threadpool.py", line 158, in run
    result = request.callable(*request.args, **request.kwds)
  File "C:\test.py", line 29, in repost
    response = requests.post(url, data1).text
AttributeError: 'list' object has no attribute 'post'

或者有没有其他实现方法?

我靠,我靠,我靠靠靠。。。。问题解决了。看上面的备注。再见。

PHP中文网PHP中文网2740 hari yang lalu954

membalas semua(2)saya akan balas

  • 阿神

    阿神2017-04-18 10:20:50

    Mula-mula tampal keseluruhan test.py Daripada mesej ralat, anda sepatutnya telah menimpa pembolehubah permintaan, menyebabkan permintaan itu menjadi jenis senarai.

    Adalah disyorkan untuk tidak menggunakan ThreadPool untuk mencapai berbilang concurrency Berdasarkan ciri Python, walaupun anda menggunakan multi-threading, anda hanya boleh menjalankan satu arahan pada masa yang sama, dan peningkatan prestasi multi-threading ialah. terhad.

    Anda harus membuat rangkaian tidak segerak dahulu, dan kemudian melaksanakan ioloop asas, atau anda boleh melaksanakan berbilang konkurensi berbenang tunggal berdasarkan asyncio atau puting beliung

    balas
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:20:50

    2.7 tidak mempunyai asyncio, anda boleh menggunakan gevent atau seumpamanya, dan terdapat berpuluh-puluh 2.7 yang sepatutnya mempunyai multipemprosesan, tetapi anda memerlukan IO-intensif, dan menggunakan berbilang proses akan menjadi tidak produktif laksanakan coroutine

    balas
    0
  • Batalbalas