У меня есть скрипт, и я хочу, чтобы одна функция запускалась одновременно с другой.
Пример кода, который я посмотрел:
import threading
def MyThread (threading.thread):
# doing something........
def MyThread2 (threading.thread):
# doing something........
MyThread().start()
MyThread2().start()
У меня проблемы с получением этой работы. Я бы предпочел, чтобы это происходило с использованием многопоточной функции, а не класса.
Это рабочий скрипт:
from threading import Thread
class myClass():
def help(self):
os.system('./ssh.py')
def nope(self):
a = [1,2,3,4,5,6,67,78]
for i in a:
print i
sleep(1)
if __name__ == "__main__":
Yep = myClass()
thread = Thread(target = Yep.help)
thread2 = Thread(target = Yep.nope)
thread.start()
thread2.start()
thread.join()
print 'Finished'
python
multithreading
chrissygormley
источник
источник
exiting
какexciting
, что я все равно считал более подходящим.Есть несколько проблем с вашим кодом:
Если вы действительно хотите сделать это только с функциями, у вас есть два варианта:
С резьбой:
С резьбой:
Документ для thread.start_new_thread
источник
thread.start_new_thread(function, args[, kwargs])
Я попытался добавить еще один join (), и, похоже, сработало. Вот код
источник
Вы можете использовать
target
аргумент вThread
конструкторе для прямой передачи функции, которая вызывается вместоrun
.источник
Вы переопределили метод run ()? Если вы переопределили
__init__
, вы обязательно позвоните в базуthreading.Thread.__init__()
?После запуска двух потоков основной поток продолжает бесконечно выполнять работу / блокировать / объединять дочерние потоки, чтобы выполнение основного потока не завершалось до того, как дочерние потоки завершат выполнение своих задач?
И, наконец, вы получаете какие-то необработанные исключения?
источник
__init__
. Требуется ли run () тогда? Спасибоdef MyThread ( threading.thread )
... Я предположил, что это были определения классов. Если вы собираетесь создать подкласс threading.thread и инициализировать объект потока с аргументом argtarget=None
или пропустить егоtarget
, то потребуется реализация run (). В противном случае, если вы просто хотите запустить простую задачу в другом потоке, смотрите ответ jkp.В Python 3 есть возможность запуска параллельных задач . Это делает нашу работу проще.
Он имеет для группировки потоков и процессов объединения .
Следующее дает понимание:
Пример ThreadPoolExecutor
Другой пример
источник