実行中の CGI スクリプトで次のエラーが発生します....
Traceback (most recent call last):, referer: http://mysite/cgi-bin/dev/testing.py
File "/var/www/cgi-bin/dev/testing.py", line 908, in <module>, referer: http://mysite/cgi-bin/dev/testing.py
webpage(), referer: http://mysite/cgi-bin/dev/testing.py
File "/var/www/cgi-bin/dev/testing.py", line 899, in webpage, referer: http://mysite/cgi-bin/dev/testing.py
getResults(form), referer: http://mysite/cgi-bin/dev/testing.py
File "/var/www/cgi-bin/dev/testing.py", line 557, in getResults, referer: http://mysite/cgi-bin/dev/testing.py
new_nums = processNums(nums), referer: http://mysite/cgi-bin/dev/testing.py
File "/var/www/cgi-bin/dev/testing.py", line 328, in processNums, referer: http://mysite/cgi-bin/dev/testing.py
t.start(), referer: http://mysite/cgi-bin/dev/testing.py
File "/usr/lib64/python2.6/threading.py", line 471, in start, referer: http://mysite/cgi-bin/dev/testing.py
_start_new_thread(self.__bootstrap, ()), referer: http://mysite/cgi-bin/dev/testing.py
thread.error: can't start new thread, referer: http://mysite/cgi-bin/dev/testing.py
私のマシンの ulimit の問題かもしれませんが、皆さんと一緒にコードを確認したかったのです。これがスレッドに使用するコードです....
import Queue
import multiprocessing
from threading import Thread
def processNums(nums):
new_nums = []
queue = Queue.Queue()
for num in nums:
queue.put(num)
thread_num = multiprocessing.cpu_count()
for x in range(0,thread_num):
t = Thread(target=multNum,args=(queue,new_nums,))
t.setDaemon(True)
t.start()
queue.join()
return new_nums
def multNum(queue,new_nums):
while True:
try: num = queue.get()
except: break
# do something....
new_num = num*123456
new_nums.append(new_num)
queue.task_done()
print processNums([54,12,87,3268,2424,148,5,9877])
出力 [6666624、1481472、10740672、403454208、299257344、18271488、617280、1219374912]
これは私のコードの非常に骨抜きにされたバージョンです (ここにすべてをコピーすることはできません) が、私の問題はここにあると思われます。私の質問は...どうにかしてこれらのスレッドを閉じる必要がありますか? Pythonはそれを自動的に行いませんか?それとも、これは apache または Linux サーバーの構成の問題ですか? このエラーが表示されるのはこれが初めてですが、使用しているデータ セットでこのアプリケーションを実行するのも初めてです。このデータ セットは、数千のスレッドを生成します。ありがとう。