Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.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 同时命中URL并处理结果_Python_Multithreading_Concurrency_Multiprocessing - Fatal编程技术网

Python 同时命中URL并处理结果

Python 同时命中URL并处理结果,python,multithreading,concurrency,multiprocessing,Python,Multithreading,Concurrency,Multiprocessing,我有一个要求,我需要每分钟点击多达2000个URL,并将响应保存到数据库中。URL需要在每分钟开始后的5秒内命中(但响应可以等待)。然后,在下一分钟,同样的事情也会发生,以此类推。所以,这是时间关键 我已经尝试使用Python多处理和线程来解决这个问题。但是,一些URL可能需要30分钟才能响应,这会阻止处理所有其他URL 我也愿意使用一些低级的东西,比如C,但不知道从哪里开始 任何正确方向的指导都会有帮助,谢谢 您需要比线程更轻量级的东西,因为如果每个URL都可以阻塞很长时间,那么您需要同时发送

我有一个要求,我需要每分钟点击多达2000个URL,并将响应保存到数据库中。URL需要在每分钟开始后的5秒内命中(但响应可以等待)。然后,在下一分钟,同样的事情也会发生,以此类推。所以,这是时间关键

我已经尝试使用Python多处理和线程来解决这个问题。但是,一些URL可能需要30分钟才能响应,这会阻止处理所有其他URL

我也愿意使用一些低级的东西,比如C,但不知道从哪里开始


任何正确方向的指导都会有帮助,谢谢

您需要比线程更轻量级的东西,因为如果每个URL都可以阻塞很长时间,那么您需要同时发送它们,而不是通过线程池

是一个围绕eventlib循环的Python包装器,它擅长于这类事情。从他们的文档中:

>>> import gevent
>>> from gevent import socket
>>> urls = ['www.google.com', 'www.example.com', 'www.python.org']
>>> jobs = [gevent.spawn(socket.gethostbyname, url) for url in urls]
>>> gevent.joinall(jobs, timeout=2)
>>> [job.value for job in jobs]
['74.125.79.106', '208.77.188.166', '82.94.164.162']

您需要比线程更轻的东西,因为如果每个URL都可以阻塞很长时间,那么您需要同时发送它们,而不是通过线程池

是一个围绕eventlib循环的Python包装器,它擅长于这类事情。从他们的文档中:

>>> import gevent
>>> from gevent import socket
>>> urls = ['www.google.com', 'www.example.com', 'www.python.org']
>>> jobs = [gevent.spawn(socket.gethostbyname, url) for url in urls]
>>> gevent.joinall(jobs, timeout=2)
>>> [job.value for job in jobs]
['74.125.79.106', '208.77.188.166', '82.94.164.162']

我不确定我是否正确理解了这个问题,但是如果您使用的是“n”个进程,并且如果所有“n”个进程都无法响应,那么更改语言将无法解决您的问题。因为瓶颈是您正在请求的服务器,而不是您的本地驱动程序代码。您可以通过切换到异步机制来消除这种依赖性。不要等待响应!让一个回调为你处理


编辑:您可能想看一看

我不确定是否正确理解了问题,但是如果您使用的是“n”个进程,并且如果所有“n”个进程都无法响应,那么更改语言将无法解决您的问题。因为瓶颈是您正在请求的服务器,而不是您的本地驱动程序代码。您可以通过切换到异步机制来消除这种依赖性。不要等待响应!让一个回调为你处理


编辑:您可能想看看

谢谢,我刚刚试用了gevent,它似乎适合我的用例。我假设这个“猴子修补”的东西也应该修补mysql连接,我也会尝试一下。我还找到了一个帮助我的资源:谢谢,我刚刚试用了gevent,它似乎适合我的用例。我假设这个“猴子修补”的东西也应该修补mysql连接,我也会尝试一下。我还发现了一个对我有帮助的资源:我以前听说过请求,但不知道这个库,我会看一看,谢谢。它实际上在内部使用了gevent!我以前听说过请求,但不知道这个库,我会看一看,谢谢。它实际上在内部使用了gevent!