同时使用 urllib2.urlopen() 的多个请求

Multiple requests using urllib2.urlopen() at the same time

我的问题是这样的;是否可以同时请求两个不同的 URL?

我想做的是使用 Python 脚本同时调用来自两个不同 URL 的请求。同时制作两个 PHP 脚本 运行(在不同的服务器上,运行 使用终端命令)。我的问题是我不能一个接一个地完成它们,因为它们每个都需要特定的时间来做某事,并且需要同时 运行,同时结束。

这可以使用 urllib2.urlopen 吗?如果是这样,我将如何去做呢?

如果没有,那么这样做的好方法是什么?

目前我有类似的东西:

import urllib2
...
if cmd.startswith('!command '):
    cmdTime = cmd.replace('!command ','',1)
    urllib2.urlopen('http://example.com/page.php?time='+cmdTime)
    urllib2.urlopen('http://example2.com/page.php?time='+cmdTime)
    print "Finished."

我的问题是他们不会同时 运行。

如果我执行 !command 60,那么它将 运行 site.com 持续 60 秒,然后转到 site2.com 60 秒,然后 运行 那个。

我觉得你可以使用多线程,一个线程发送一个请求。在python中,可以继承threading.Threadclass并覆盖运行方法。可以开启两个线程,在两个线程中使用synchronous,保证两个请求几乎同时发送。

但我认为不能保证服务器上的php脚本会在同一时间准确执行,因为网络时间和系统调度时间不在你的控制范围内。

我建议您创建一个函数来获取已解析的源代码,您应该在其中传递要在列表中抓取的 url 的列表作为参数。稍后在 URL 的列表上循环并使用线程。 我会post一些示例代码给你,请相应地修改它。

import threading
import urllib2


def execute_url_list(urls_list):
    if cmd.startswith('!command '):
    cmdTime = cmd.replace('!command ','',1)
    for url in urls_list:
        urllib2.urlopen(url+cmdTime)

urls_list = ['url1', 'url2']
processes = []
for k in urls_list:
    process = threading.Thread(target=execute_url_list, args=[k])
    process.setDaemon(True)
    process.start()
    processes.append(process)


for process in processes:
    process.join()