Выполнить 'N' функции параллельно в Python - PullRequest
0 голосов
/ 02 ноября 2018

Я знаю, что этот вопрос задавался несколько раз, но я не мог найти ответ, который помог бы мне. Мой вопрос заключается в том, можем ли мы выполнить две функции параллельно в python, где у каждой функции есть цикл for и вывод некоторых значений. Например, у меня есть две функции a () и b (), где a () печатает числа 1..n (скажем, n = 3), а b () печатает числа 11..n (скажем, n = 13) наряду с текущим временем. Я ожидаю, что результат будет как:

function a :1 2018-11-02 15:32:58
function b :11 2018-11-02 15:32:58
function a :2 2018-11-02 15:32:59
function b :12 2018-11-02 15:32:59

но в настоящее время печатается следующее:

function a :1 2018-11-02 15:32:58
function a :2 2018-11-02 15:32:59
function b :11 2018-11-02 15:33:00
function b :12 2018-11-02 15:33:01

Код:

import time
from threading import Thread
import datetime
def a():
    for i in range(1,3):
        print 'function a :'+str(i) + ' ' + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
        time.sleep(1)
def b():
    for i in range(11,13):
        print 'function b :'+str(i) + ' ' + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
        time.sleep(1)

if __name__=="__main__":
    t1=Thread(target=a())
    t2=Thread(target=b())
    t1.start()
    t2.start()

1 Ответ

0 голосов
/ 02 ноября 2018

Проблема здесь в том, что у вас есть target как a() вместо a (обратите внимание на круглые скобки). Это означает, что вы вызываете функцию a, а затем передаете результат этого как target в Thread. Это не то, что вы хотели - вы хотите, чтобы target была самой функцией a. Поэтому просто удалите скобки при создании экземпляров Thread, например:

if __name__=="__main__":
    t1=Thread(target=a)
    t2=Thread(target=b)
    t1.start()
    t2.start()
...