Вам необходимо использовать многопроцессорную обработку, чтобы делать то, что вы хотите. Он в основном запускает новую (клонированную) копию python в фоновом режиме.
import time
from multiprocessing import Process
def thing_1():
"""We'll run this in a subprocess."""
for i in range(10):
print('thing_1: {}'.format(i))
# let's make it take a bit longer
time.sleep(1)
def thing_2():
"""We'll run this as a normal function in the current python process."""
time.sleep(1)
c = 5 * 2
print('thing_2: {}'.format(c))
# let's make this take a bit longer too
time.sleep(1)
if __name__ == '__main__':
# start the first thing running "in the background"
p = Process(target=thing_1)
p.start()
# keep a record of when we started it running
start_thing_1 = time.time()
# let's run the other thing
start_thing_2 = time.time()
thing_2()
end_thing_2 = time.time()
# this will wait for the first thing to finish
p.join()
end_thing_1 = time.time()
print('thing 1 took {}'.format(end_thing_1 - start_thing_1))
print('thing 2 took {}'.format(end_thing_2 - start_thing_2))
В конце вы увидите:
thing 1 took 10.020239114761353
thing 2 took 2.003588914871216
Таким образом, в то время как thing_1 работает в фоновом режиме, локальный питон может продолжать делать другие вещи.
Вам необходимо использовать специальные механизмы для передачи любой информации между двумя копиями python. И печать всегда будет немного странной, потому что вы действительно не знаете, какая копия python собирается печатать дальше.
Может помочь: https://stackoverflow.com/questions/23100704/running-infinite-loops-using-threads-in-python/23102874#23102874 –
Python не может запускать несколько процессов изначально. Посмотрите на модуль потоковой передачи. – Bretsky
Python может использовать несколько процессов - это то, что делает модуль «многопроцессорности». –