Делаю почтовую многопоточную рассылку по стандартному примеру.
class Worker(threading.Thread): def __init__(self,queue): threading.Thread.__init__(self) self.__queue = queue def run(self): while True: try: item = self.__queue.get_nowait() # ждём данные except Queue.Empty: break # данные закончились, прекращаем работу try: self.work(item) # работа except Exception: traceback.print_exc() time.sleep(0.5) self.__queue.task_done() # задача завершена return def work(self,m): html_link = NewsletterHtml.objects.get(pk=m.html_data_id) msg = EmailMessage(m.subject, html_link.html, settings.DEFAULT_FROM_EMAIL, [m.email]) msg.content_subtype = "html" # Main content is now text/html try: print m.email msg.send() print m.email, '- Done' except (socket_error, SMTPRecipientsRefused, SMTPAuthenticationError), err: print 'Error' m.error = 1 m.sent = datetime.datetime.now() m.save() #-------------------------------------------------------------------------------------------------------------------------- if messages: for m in messages: queue.put(m) for i in xrange(num_threads): t = Worker(queue) # создаем поток t.start() # стартуем time.sleep(0.3) # чтобы в консоли друг на друга не накладывались
В очереди порядка 8000 сообщений. Сообщений через 100 выдает Segmentation fault (core dumped).
Python 2.6 freebsd 8.2
В чем может быть дело, подскажите плз ? Локально, на винде, отрабатывает без проблем.
Игорь