doza_and
В заданной постановке задачи достаточно каждый поток ограничить половинным числом выполнений.https://docs.python.org/2/library/sched.html
Забавный модуль, только с потоками плохо дружит, по приведенной ссылке рекомендуют в потоках юзать
threading.Timer. ИМХО модуль юзабелен, когда эвенты разные. А к данной задаче он мало применим… Как например тот пример, что в доке, зациклить чтоб обработал 1000 тасков? Костыли…
А данная постановка задачи вообще туманная. ИМХО автор сам не знает чего хочет добится. Задача имеет смысл только если поток отрабатывает быстрее отведенного ему времени. Т.е. при таком раскладе почти всегда будет работать только один поток, но “иногда”, когда первый притормозит и не успеет, подключится второй. Я чуть мозг не сломал, пытаясь понять: нафига их именно два?? Если неуспевания редки, то можно обойтись без потоков, все делать в основном. А если случаются частенько, тогда и второй может задержаться… Почему два? не проще ли както так:
def worker():
cur_task = q.get()
print cur_task
import Queue
import threading
import time
q = Queue.Queue()
q.put(#все таски сразу)
while not q.empty():
threading.Thread(target = worker).start()
time.sleep(60/#колво в минуту)
И в результате, раз в N секунд, будет новый поток.
ЗЫ. Автор жжешь… нафига вот эта строчка
global sj_data??? У тебя все потоки пишут в одну глобальную переменную, и если контекст сменится между присвоением и return, то оба потока вернут одно и тоже - результат, который запишет последний выполнившийся поток