Я новичок в многопоточной обработке, поэтому, пожалуйста, простите меня, если я меняю условия или пропущу что-то очевидное.Нити Python не запускаются одновременно
Код, приведенный ниже, не предлагает каких-либо преимуществ по сравнению с другим кодом, который вызывает одни и те же функции один за другим.
import time
import threading
start_time = time.clock()
def fibonacci(nth): #can be ignored
first = 0
second = 1
for i in range(nth):
third = first + second
first = second
second = third
print "Fibonacci number", i + 1, "is", len(str(first)), "digits long"
def collatz(collatz_max): #can be ignored
for n in range(collatz_max):
n = n + 1 #avoid entering 0
solution = []
solution.append(n)
while n != 1:
if n % 2 == 0:
n = n/2
else:
n = (n*3) + 1
solution.append(n)
print "Path for Collatz number", collatz_max, "is", solution
def scripts():
thread_fibonacci = threading.Thread(target=fibonacci, args = (800000,))
thread_collatz = threading.Thread(target=collatz, args = (400000,))
thread_fibonacci.start()
thread_collatz.start()
return thread_fibonacci, thread_collatz
all_scripts = scripts()
#wait until both threads are finished
for script in all_scripts:
script.join()
print time.clock() - start_time, "seconds"
Что мне нужно сделать, чтобы нити одновременными? Может ли GIL означать, что параллелизм может быть достигнут только через отдельные процессы? Если да, то в чем смысл многопоточности?
Использование Python 2.7.5 на Windows 8.1, четырехъядерный процессор. Любая помощь будет оценена по достоинству.
Вы можете проверить этот ответ: http://stackoverflow.com/a/1294402/58129 –
Используйте 'multiprocessing' вместо' threading', чтобы обойти ограничение GIL. – Blender
Что сказал Блендер. См. Этот вопрос для получения дополнительной информации/примеров - http://stackoverflow.com/questions/17424569/python-threading-vs-multiprocessing-in-linux – DreadPirateShawn