Python спит, не мешая сценарию? - PullRequest
5 голосов
/ 28 февраля 2011

Эй, мне нужно знать, как спать в Python, не мешая текущему сценарию. Я пытался использовать time.sleep(), но он заставляет весь сценарий спать.

Как например

<code>
import time
def func1():
    func2()
    print("Do stuff here")
def func2():
    time.sleep(10)
    print("Do more stuff here")</p>

<p>func1()
Я хочу, чтобы он тут же печатал «Делать вещи здесь», затем подождите 10 секунд и печатал «Делать вещи здесь».

Ответы [ 3 ]

7 голосов
/ 28 февраля 2011

Буквально интерпретируя ваше описание, вы должны поместить оператор print перед вызовом func2().

Однако, я предполагаю, что вы действительно хотите для func2() фоновую задачу, которая позволяетfunc1() немедленно вернуться и не ждать, пока func2() завершит выполнение.Для этого вам нужно создать поток для запуска func2().

import time
import threading

def func1():
    t = threading.Thread(target=func2)
    t.start()
    print("Do stuff here")
def func2():
    time.sleep(10)
    print("Do more stuff here")

func1()
print("func1 has returned")
6 голосов
/ 28 февраля 2011

Вы можете использовать threading.Timer:

from __future__ import print_function
from threading import Timer

def func1():
    func2()
    print("Do stuff here")
def func2():
    Timer(10, print, ["Do more stuff here"]).start()

func1()

Но поскольку @ unholysampler уже указал , может быть, лучше написать:

import time

def func1():
    print("Do stuff here")
    func2()

def func2():
    time.sleep(10)
    print("Do more stuff here")

func1()
3 голосов
/ 05 апреля 2012

Если вы запускаете скрипт в командной строке, попробуйте использовать параметр -u. Он запускает сценарий в небуферизованном режиме и сделал свое дело для меня.

Например:

python -u my_script.py

...