我第一次使用来自线程类的线程,并且它们似乎在函数运行后自由释放。我试图一次运行最多5个线程。由于一个线程创建了下一个线程,所以会有一些重叠,但是在我得到异常之前我一次看到2000多个线程正在运行"无法启动新线程"。
from threading import Thread
import string
URLS = ['LONG LIST OF URLS HERE']
currentThread = 0
LASTTHREAD = len(URLS) - 1
MAXTHREADS = 5
threads = [None] * (LASTTHREAD + 1)
def getURL(threadName, currentThread):
print('Thread Name = ' + threadName)
print('URL = ' + str(URLS[currentThread]))
if currentThread < LASTTHREAD:
currentThread = currentThread + 1
thisThread = currentThread
try:
threads[thisThread] = Thread(target = getURL, args = ('thread' + str(thisThread), currentThread, ))
threads[thisThread].start()
threads[thisThread].join()
except Exception,e:
print "Error: unable to start thread"
print str(e)
for i in range(0, MAXTHREADS):
currentThread = currentThread + 1
try:
threads[i] = Thread(target = getURL, args = ('thread' + str(i), currentThread, ))
threads[i].start()
threads[i].join()
except Exception,e:
print "Error: unable to start thread"
print str(e)
我可以接受任何其他清理工作,我也可以在这里工作,因为我对python很新,而且对于线程来说是全新的。我此刻正试图正确设置线程。最终这将刮掉URL。
答案 0 :(得分:0)
我建议查看一个线程池,让线程从合适的共享数据结构(例如队列)中获取任务,而不是始终启动新线程。
根据您实际想要做的事情,如果您正在使用CPython(如果您不知道CPython的意思,那么您将会这样做)您实际上可能无法获得任何性能提升使用线程(由于全局解释器锁定)。因此,您可能最好不要查看多处理模块。
<?php if (
stristr($ua, "Windows CE") or
stristr($ua, "AvantGo") or
stristr($ua,"Mazingo") or
stristr($ua, "Blazer") ) {
$DEVICE_TYPE="MOBILE";
}
if (isset($DEVICE_TYPE) and $DEVICE_TYPE=="MOBILE") {
$location='mobile/index1.php';
header ('Location: '.$location);
exit;
}
?>