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

Python 同时使用urllib2.urlopen()的多个请求,python,urllib2,Python,Urllib2,我的问题是,;可以同时请求两个不同的URL吗 我要做的是,使用Python脚本同时调用来自两个不同URL的请求。使两个PHP脚本同时运行(在不同的服务器上,运行终端命令)。我的问题是,我不能一个接一个地完成它们,因为它们都需要一段特定的时间来完成某些事情,并且需要同时运行,同时结束 使用urllib2.urlopen是否可以实现这一点?如果是的话,我将如何着手做这件事 如果没有,那么什么是一个好的方法呢 目前我有一些类似于: import urllib2 ... if cmd.startswit

我的问题是,;可以同时请求两个不同的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."
我的问题是它们不会同时运行


如果我有!命令60,然后它将运行site.com 60秒,然后转到site2.com 60秒并运行该命令

我认为您可以使用多线程并在一个线程中发送一个请求。在python中,您可以继承threading.Thread类并重写run方法。您可以启动两个线程并在两个线程中使用synchronous来确保两个请求几乎同时发送


但是我认为它不能确保服务器上的php脚本同时执行,因为网络时间和系统计划时间不在您的控制之下。

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

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()

线程可能很有用。有关类似的问题,请参阅本文,并提供解决方案。请注意,“请求”通常比“urllib2”更易于使用,但在这种情况下两者都可以使用。请注意,关于urllib2有一些内容,但只要URL是字符串,这个示例就可以。@KillianDS:我同意您的观点,线程的使用确实有限制,但是字符串URL本身不会产生任何问题。我已经用了很长一段时间了。谢谢你指出这一点。我不确定,但我假设“进程=[]”应该在for循环之外定义。@Alex:我的坏进程=[]应该在for循环之前定义,否则每次迭代都会被清空。谢谢你指出,我也会更新答案。