Питон спит, не вмешиваясь в сценарий?


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

Как например


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

Func1()

Я хочу, чтобы он немедленно напечатал Do stuff здесь, затем подождите 10 секунд и напечатайте Do more stuff здесь.
3 5

3 ответа:

Интерпретируя ваше описание буквально, Вам нужно поставить оператор 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")

Вы могли бы использовать 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()

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

Например:

python -u my_script.py