def loop1(): for i in range(10): i += 1 print (i) def loop2(): for i in range(10): i += 1 print (i) loop1() loop2()
def loop1(): for i in range(10): i += 1 print (i) def loop2(): for i in range(10): i += 1 print (i) loop1() loop2()
def loop1(): for i in range(10): i += 1 print('I am the loop1:', i) yield def loop2(): for i in range(10): i += 1 print('I am the loop2:', i) yield task1 = loop1() task2 = loop2() try: while True: next(task1) next(task2) except StopIteration: pass
from multiprocessing import Process def loop1(): for i in range(10): i += 1 print('I am the loop1:', i) def loop2(): for i in range(10): i += 1 print('I am the loop2:', i) p1 = Process(target=loop1) p2 = Process(target=loop2) p1.start() p2.start()
scidamспасибо большое, то что нужно, теперь другая проблема. У меня UI(User Interface) с полями логин и пароль и функция, которая отправляет запрос на авторизацию. Как сделать так, чтобы вот эта функция ждала пока не получит данные с полей логин и пароль и чтобы UI во время отправки запроса продолжал свою работу. А то я запускаю оба эти процесса (UI и отправка запроса) и получается, что функция еще не получила данные с полей логин и пароль, сразу же отправляет запрос на сервер
Чтобы переключаться между функциями loop1 и loop2, вполне достаточно обычных генераторов и здесь совершенно не нужен никакой async:
scidam
Чтобы переключаться между функциями loop1 и loop2, вполне достаточно обычных генераторов и здесь совершенно не нужен никакой async:
import sys import requests from multiprocessing import Process from PyQt5.QtCore import * from PyQt5.QtWidgets import * from PyQt5.QtQuick import * from PyQt5.QtQml import * from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from api import Api # engine = create_engine('sqlite:///data/sim.db') # Session = sessionmaker(bind=engine) if __name__ == '__main__': # session = Session() class Gui(object): # myApp = None appLabel = None # ctx = None win = None login = None password = None button = None gui = Gui() api = Api() myApp = QApplication(sys.argv) gui.appLabel = QQmlApplicationEngine() ctx = gui.appLabel.rootContext() ctx.setContextProperty("main", gui.appLabel) def m_gui(): # User Interface gui.appLabel.load('MessengerGUI/main.qml') gui.win = gui.appLabel.rootObjects()[0] gui.login = gui.win.findChild(QQuickItem, "login") gui.password = gui.win.findChild(QQuickItem, "password") gui.button = gui.win.findChild(QQuickItem, "button") def button_click(): # When button clicked send auth request to server api.auth(gui.login.property('text'), gui.password.property('text')) print(api.access_token, api.home_server, api.user_id, api.device_id) m_gui() gui.button.clicked.connect(button_click) gui_process = Process(target=m_gui()) button_process = Process(target=button_click()) gui_process.start() button_process.start() gui.win.show() sys.exit(myApp.exec_())
Как сделать так, чтобы вот эта функция ждала пока не получит данные с полей логин и пароль и чтобы UI во время отправки запроса продолжал свою работу
Darkhanну так Qt событийно ориентированая система, определите событие(например нажали кнопку “войти”) и запускайте вашу процедуру авторизации тоько после этого события.
Как сделать так, чтобы вот эта функция ждала пока не получит данные с полей логин и пароль и чтобы UI во время отправки запроса продолжал свою работу.
button_process = Process(target=auth()) button_process.start()
PEHDOMМне нужно добиться того, чтобы когда я отправлял запрос на сервер, GUI в это время работало. А то во время запроса на сервер и получения токена, GUI зависает и отвисвет только когда я получаю токен
PEHDOMэто понятно, но вот оба потока не могут брать данные с одной переменной. Данные логин и пароль записываются в переменные управляющего потока, я не знаю как из второго потока получить данные с управляющего потока. Если тупо их вызывать из второго потока, то получается конфликт между потоками
ну так и запускайте запрос в отдельном процессе, ГУЙ будет дальше продолжать работать как работал.