Я пытаюсь запустить код, где я работаю с очередью и потоками.
Ниже приведен фрагмент кода:
import threading
from Queue import Queue
def function():
results = []
for i in range(68):
return_list = function2(i)
results.append(return_list)
if return_list:
print("True returned")
else:
print("Returned false")
return results
def function2(i):
print("In function 2 with: " + str(i))
results = []
working_queue = Queue()
for _ in range(25):
worker = threading.Thread(target=function3, args=(working_queue, results))
worker.setDaemon(True)
worker.start()
for p in range(150):
working_queue.put(p)
working_queue.join()
return results
def function3(working_queue, results):
while True:
try:
current_item = working_queue.get()
print("Processing:" + str(current_item))
results.append("True")
except Exception as e:
print("An exception in function 3: " + str(e))
finally:
working_queue.task_done()
if __name__ == "__main__":
results = function()
print(str(results))
Код вызывает следующее исключение:
Traceback (most recent call last):
File "C:/pythonErrors/stackoverflow.py", line 45, in <module>
function()
File "C:/pythonErrors/stackoverflow.py", line 8, in function
return_list = function2(i)
File "C:/pythonErrors/stackoverflow.py", line 24, in function2
worker.start()
File "C:\Python27\lib\threading.py", line 736, in start
_start_new_thread(self.__bootstrap, ())
thread.error: can't start new thread
Как мы можем удалить ранее созданные и завершенные темы. Так что при каждом выполнении цикла for в function2()
новые потоки не создаются.
Требуется создать только 25 потоков для всего процесса (в настоящее время создается 68x25 потоков)