注意是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'
或者有没有其他实现方法?
我靠,我靠,我靠靠靠。。。。问题解决了。看上面的备注。再见。
阿神2017-04-18 10:20:50
먼저 test.py 전체를 붙여넣으면 오류 메시지에서 요청 변수를 덮어써야 요청이 목록 유형이 됩니다.
다중 동시성을 구현하기 위해서는 ThreadPool을 사용하지 않는 것이 좋습니다. Python의 특성상 멀티스레딩을 사용하더라도 동시에 하나의 명령만 실행할 수 있으며, 멀티스레딩의 성능 향상은 다음과 같습니다. 제한된.
먼저 네트워크를 비동기식으로 만든 다음 기본 ioloop를 구현해야 합니다. asyncio 또는 tornado를 기반으로 단일 스레드 다중 동시성을 구현할 수도 있습니다
巴扎黑2017-04-18 10:20:50
2.7에는 asyncio가 없고 gevent 등을 사용할 수 있으며 다중 처리가 필요한 수십 개의 2.7이 있지만 IO 집약적이며 다중 프로세스를 사용하면 비생산적입니다. 코루틴을 구현합니다.