Ive пыталась прочитать потоки и многопроцессорность, но все примеры сложны и расширены для моего уровня знаний о программировании на языке python/programming. Я хочу запустить функцию, состоящую из цикла while, и пока этот цикл выполняется, я хочу продолжить работу с программой и в конечном итоге изменить условие цикла while и завершить этот процесс. Это код:Python простейшая форма многопроцессорной обработки
class Example():
def __init__(self):
self.condition = False
def func1(self):
self.condition = True
while self.condition:
print "Still looping"
time.sleep(1)
print "Finished loop"
def end_loop(self):
self.condition = False
Я делаю следующие функции-вызовы:
ex = Example()
ex.func1()
time.sleep(5)
ex.end_loop()
То, что я хочу для func1, чтобы запустить в течение 5 секунд перед end_loop()
вызывается и изменяет состояние и концы цикл и, следовательно, также функцию. Т.е. я хочу, чтобы один процесс запускался и «переходил» на func1
и в то же время Я хочу, чтобы time.sleep(5)
вызывался, поэтому процессы «раскалываются» при достижении func1
, один процесс вводит функцию, а другой продолжает работу по программе и начать с выполнения time.sleep(5)
.
Это должен быть самый простой пример многопроцесса, все же у Ive возникли проблемы с поиском простого способа сделать это!
Спасибо
edit1: относительно do_something
. В моей реальной проблеме do_something
заменяется кодом, который связывается с другой программой через сокет и получает пакеты с координатами каждые 0,02 секунды и сохраняет их в membervariables класса. Я хочу, чтобы это постоянное обновление координат начиналось, а затем можно было читать координаты с помощью других функций одновременно.
Однако это не так актуально. Что делать, если do_something
заменяется:
time.sleep(1)
print "Still looping"
Как мне решить мою проблему тогда?
EDIT2: Я попытался мультипроцессирование так:
from multiprocessing import Process
ex = Example()
p1 = Process(target=ex.func1())
p2 = Process(target=ex.end_loop())
p1.start()
time.sleep(5)
p2.start()
Когда я побежал это, я никогда не получил p2.start()
, так что не помогло. Даже если бы это было не так, как я и ищу. То, что я хочу, было бы просто начать процесс p1
, а затем продолжить с time.sleep
и ex.end_loop()
Пожалуйста, будьте конкретны о 'do_something'. – filmor
см. Отредактированный вопрос – erling
Я читал, что python concurrent.futures был более простым способом обработки многопоточности по сравнению с многопроцессорной обработкой python. Однако я еще не копаю еще. Может быть, вы могли бы попробовать. –