2016-07-24 5 views
0

У меня есть сервер XMLRPC, и клиент выполняет некоторые функции на сервере и получает возвращаемое значение. Если функция выполняется быстро, все нормально, но у меня есть функция, которая читает из файла и возвращает некоторое значение пользователю. Чтение занимает около минуты (есть некоторые сложные вещи), и когда один клиент запускает эту функцию на сервере, сервер не может отвечать за других пользователей, пока функция не будет выполнена.Возвращаемое значение из потока в python без блокировки основного потока

Я хотел бы создать новую тему, которая будет читать этот файл и возвращать значение для пользователя. Возможно ли это как-то?

Есть ли хорошие решения/паттеры, чтобы не блокировать сервер, когда один клиент запускает какую-то длинную функцию?

+0

Что вы используете для своего сервера XMLRPC? Вы сами пишете его или используете библиотеку? – ErikR

ответ

-1

Да, используя модуль threading, вы можете создавать новые темы. См. documentation. Примером может служить следующее:

import threading 
import time 

def main(): 
    print("main: 1") 
    thread = threading.Thread(target=threaded_function) 
    thread.start() 
    time.sleep(1) 
    print("main: 3") 
    time.sleep(6) 
    print("main: 5") 

def threaded_function(): 
    print("thread: 2") 
    time.sleep(4) 
    print("thread: 4") 

main() 

Этот код использует time.sleep имитировать, что действие занимает определенное количество времени. Результат должен выглядеть так:

main: 1 
thread: 2 
main: 3 
thread: 4 
main: 5 
+0

, но я хотел бы вернуть значение, а не печатать – Mateusz

+0

Затем [это] (https://stackoverflow.com/questions/6893968/how-to-get-the-return-value-from-a-thread-in- python) - это то, что вам нужно. – Dartmouth

Смежные вопросы