2016-10-02 2 views
0

У меня есть два устройства Android, подключенные к моей машине Linux, и мне нужно иметь возможность снимать снимок одновременно и в одно и то же время. Как я могу достичь этого в python? Это то, что я до сих пор:Python: одновременно запускать несколько команд

import time, datetime 
from threading import Thread 
from Queue import Queue 

def get_screenshot(deviceid): 
    print deviceid 
    print datetime.datetime.now() 
    # Logic to get screenshot goes here 

deviceids = ["blabla1", "blabla2"] 

q = Queue() 

for d in deviceids: 
    t = Thread(target=get_screenshot, args=(d,)) 
    t.setDaemon(True) 
    t.start() 

for d in deviceids: 
    q.put(d) 

q.join() 

Результат выглядит следующим образом:

blabla1 
2016-10-02 12:55:17.146964 
blabla2 
2016-10-02 12:55:17.147141 

Проблема заключается в том: 1. Является ли правильным подходом? 2. Почему разница в 1 мсек? Можно ли этого избежать? 3. Эта программа не выходит. Мне нужно Ctrl + Z из этого.

+0

разница есть .177 мс это не много. – njzk2

ответ

0
import datetime 
from threading import Thread 

def get_screenshot(deviceid): 
    print("%s %s" %(deviceid, datetime.datetime.now())) 

deviceids = ["blabla1", "blabla2"] 

for d in deviceids: 
    t = Thread(target=get_screenshot, args=(d,)) 
    t.start() 
  1. Вам не нужно очереди.
  2. 0,2 мс потрачено впустую на создание и запуск потоков.
  3. Это потому, что вы помещаете строки в очередь и присоединяетесь к этой очереди - очередь «ждет строк» ​​и зависает. Вам действительно нужно присоединиться к вашим темам? Вы можете записывать свои скриншоты в файлы в функции потока. Программа Python автоматически закрывается, когда все ее потоки завершены.
Смежные вопросы