Я до сих пор довольно новичок в написании сценариев python и стараюсь ускорить и сгладить некоторые из моих инструментов, добавив поддержку многопоточности. Я чувствую, что, может быть, мне не хватает понимания теории рабочего процесса, поэтому не стесняйтесь перенаправить свое мышление, если я буду делать это по-другому. В основном то, что я пытаюсь сделать, это следующее:Многопоточные инструменты
==================================================================
###Pseudo-code -- I apologize if this does not follow existing conventions
main_function()
if do_stuff_function is not running:
Thread1 = new thread running do_stuff_function
do_stuff_function(args)
do some stuff
wait for 60 seconds (possibly using time.sleep())
end thread (tell main_function that the thread is done)
==================================================================
###Abridged code
def main(self):
check = True
index = 0
While index < 5:
if check == True:
check = False
thread1 = threading.Thread(target=self.doStuff, args=(self, index))
def do_stuff(self, index):
###Stuff happens here####
###iterate index and somehow return it (possibly a global variable)
time.sleep(60)
###somehow end the thread (still not entirely sure how to do that)
===================================================================
Примечания:
- Этот инструмент имеет графический интерфейс, и все это, как правило, запереть и заморозить, если я запустить time.sleep() в основной цикл, поэтому я решил, что многопоточность будет хорошим решением (не стесняйтесь исправлять меня, если это неправильно). Или, возможно, другой способ подождать, чтобы не замерзать весь поток во время ожидания.
- Программа зависает в цикле while, есть ли способ сделать эту проверку без необходимости петли, возможно, что-то вроде обратного вызова (например, имитированная кнопка нажимает, когда заканчивается функция do_stuff())?
- Я также пытаюсь добавить к нему некоторую проверку ошибок, поэтому на основе результатов do_stuff() возвращаются разные коды ошибок (что-то, что нужно иметь в виду).
Прошу прощения, если этого недостаточно. не стесняйтесь спрашивать более подробную информацию, если вам это нужно. На самом деле, ребята, я ценю всю помощь, которую я могу получить, я просто пытаюсь получить четкое представление об этом! Благодаря!
Используйте незанятое событие. –
Нити не ускоряют что-либо в вашем коде, наоборот, они замедляют его. – michaelmeyer
Чтобы создать комментарий к @ doukremt, найдите глобальную блокировку интерпретатора python (GIL), вот [статья] (http://eli.thegreenplace.net/2012/01/16/python-parallelizing-cpu-bound-tasks- с-multiprocessing /), которые помогли мне. – John