У меня есть две простые функции (петли над диапазоном), которые могут выполняться отдельно без какой-либо зависимости. Я пытаюсь запустить эти 2 функции как с помощью модуля многопроцессорности Python, так и с помощью модуля многопоточности. .Многопроцессорное время на многопоточное время Python
Когда я сравнил вывод, я вижу приложение занимает несколько процессов 1 секунду больше, чем многопоточность модуль в ..
Я прочитал многопоточность не так эффективна из-за глобальным блокировки переводчика ...
Исходя из вышесказанного stmts - 1. Лучше всего использовать множитель обрабатывать, если нет зависимости между двумя процессами? 2. Как рассчитать количество процессов/потоков, которые я могу запустить в моей машине для достижения максимальной эффективности .. 3. Кроме того, есть ли способ, чтобы рассчитать эффективность программы с использованием многопоточности ...
Multithread модуль ...
from multiprocessing import Process
import thread
import platform
import os
import time
import threading
class Thread1(threading.Thread):
def __init__(self,threadindicator):
threading.Thread.__init__(self)
self.threadind = threadindicator
def run(self):
starttime = time.time()
if self.threadind == 'A':
process1()
else:
process2()
endtime = time.time()
print 'Thread 1 complete : Time Taken = ', endtime - starttime
def process1():
starttime = time.time()
for i in range(100000):
for j in range(10000):
pass
endtime = time.time()
def process2():
for i in range(1000):
for j in range(1000):
pass
def main():
print 'Main Thread'
starttime = time.time()
thread1 = Thread1('A')
thread2 = Thread1('B')
thread1.start()
thread2.start()
threads = []
threads.append(thread1)
threads.append(thread2)
for t in threads:
t.join()
endtime = time.time()
print 'Main Thread Complete , Total Time Taken = ', endtime - starttime
if __name__ == '__main__':
main()
модуль нескольких процессов
from multiprocessing import Process
import platform
import os
import time
def process1():
# print 'process_1 processor =',platform.processor()
starttime = time.time()
for i in range(100000):
for j in range(10000):
pass
endtime = time.time()
print 'Process 1 complete : Time Taken = ', endtime - starttime
def process2():
# print 'process_2 processor =',platform.processor()
starttime = time.time()
for i in range(1000):
for j in range(1000):
pass
endtime = time.time()
print 'Process 2 complete : Time Taken = ', endtime - starttime
def main():
print 'Main Process start'
starttime = time.time()
processlist = []
p1 = Process(target=process1)
p1.start()
processlist.append(p1)
p2 = Process(target = process2)
p2.start()
processlist.append(p2)
for i in processlist:
i.join()
endtime = time.time()
print 'Main Process Complete - Total time taken = ', endtime - starttime
if __name__ == '__main__':
main()
В качестве примечания стороны: time.time() может иметь точность до 1 секунды, а также может смущаться изменениями часов. Таким образом, это не идеальный способ измерения производительности, особенно для кода, который занимает около секунды. – abarnert