Форум сайта python.su
0
Всем доброго!
Пытаюсь разобраться с потоками. Есть следующий пример:
# -*- coding: utf-8 -*- import threading class myThread(threading.Thread): def __init__(self, x, ip): threading.Thread.__init__(self) self.x = x self.ip = ip def run(self): for i in xrange(10): print self.x, self.ip t1 = myThread("obj1", "192.168.1.1") t2 = myThread("obj2", "192.168.1.2") t3 = myThread("obj3", "192.168.1.3") t1.start() t2.start() t3.start()
obj1 192.168.1.1 obj1 192.168.1.2 obj1 192.168.1.3
obj3obj1obj2 192.168.1.3192.168.1.1192.168.1.2 obj3obj1obj2 192.168.1.3192.168.1.1192.168.1.2
Офлайн
20
Операция print в питоне не потокобезопасна
http://stackoverflow.com/questions/3029816/how-do-i-get-a-thread-safe-print-in-python-2-6
Офлайн
221
Cover Story
Может лучше через очереди сделать? модуль Queue, посмотрите примеры
Офлайн
0
О, спасибо буду разбираться!
Офлайн
18
import threading lock = threading.Lock() def myPrint(*arg): lock.acquire() try: print arg finally: lock.release() class myThread(threading.Thread): def __init__(self, x, ip): threading.Thread.__init__(self) self.x = x self.ip = ip def run(self): for i in xrange(10): myPrint( self.x, self.ip) t1 = myThread("obj1", "192.168.1.1") t2 = myThread("obj2", "192.168.1.2") t3 = myThread("obj3", "192.168.1.3") t1.start() t2.start() t3.start()
Офлайн
0
Да скорее вы правы с оператором print
# -*- coding: utf-8 -*- import threading, csv class myThread(threading.Thread): def __init__(self, x, ip): threading.Thread.__init__(self) self.x = x self.ip = ip def run(self): for i in xrange(10): ss = [self.x, self.ip] writ.writerow(ss) #print self.x, self.ip ff = open("invent_r.txt", "wb") writ = csv.writer(ff, delimiter="\t") t1 = myThread("obj1", "192.168.1.1") t2 = myThread("obj2", "192.168.1.2") t3 = myThread("obj3", "192.168.1.3") t1.start() t2.start() t3.start() ff.close()
Отредактировано Cover Story (Апрель 2, 2013 10:39:15)
Офлайн
0
sp3 Спасибо большое, сразу не заметил!
Офлайн