Есть поток, который запускается каждые 60 сек.
С этого потока формируется словарь и передается в другой поток для посыла запросов.
Проблема состоит в следующем, при выполнении scheduled_req сообщения часто дублируются,
проверил какой словарь формирует message_delayed и сравнил уже с переданным для отправки, логи ниже.
В потоки только вникаю и мало опыта, подскажите в чем причина?
def scheduled_req(send_dlist):
from api.models import Scheduled
print('Separate thread: ', send_dlist)
for i in send_dlist:
url = 'http://0.0.0.0:8080/api/v1/message/send'
data = dict(token=send_dlist.get(i), message_id=i)
req = requests.post(url, data=json.dumps(data))
try:
Scheduled.objects.create(response=req.json())
except Exception as e:
print(str(e))
# Theardings
def message_delayed():
while True:
mes = Message.objects.filter(status='scheduled').values('owner_id', 'message_id', 'timestamp')
# получаем id сообщений которые соответствуют времени отправки
send_dlist = {i['message_id']: get_token(i['owner_id']) for i in mes if
i['timestamp'] in range(round(time.time() - 60), round(time.time()))}
print('List of messages: ', send_dlist)
scheduled_thread = threading.Thread(name='scheduled_thread', target=scheduled_req, args=[send_dlist])
scheduled_thread.start()
time.sleep(60)
t = threading.Thread(name='message_delayed', target=message_delayed, daemon=True)
t.start()
Видно что список один, а запрос срабатывает 2 раза...
List of messages: {'33_0': '9e9c0952-fd92-11e6-a095-52540010ddb4'}
Separate thread: {'33_0': '9e9c0952-fd92-11e6-a095-52540010ddb4'}
[06/Mar/2017 10:17:01] "POST /api/v1/message/send HTTP/1.1" 200 291
[06/Mar/2017 10:17:07] "POST /api/v1/message/send HTTP/1.1" 200 291
List of messages: {'33_1': '9e9c0952-fd92-11e6-a095-52540010ddb4'}
Separate thread: {'33_1': '9e9c0952-fd92-11e6-a095-52540010ddb4'}
[06/Mar/2017 10:18:00] "POST /api/v1/message/send HTTP/1.1" 200 291
[06/Mar/2017 10:18:03] "POST /api/v1/message/send HTTP/1.1" 200 291
Логи цикла
[06/Mar/2017 11:11:04] "POST /api/v1/message/send HTTP/1.1" 200 291
33_0
{'response': {'tw': {'posted': '838708501492944897'}, 'vk': {'posted': '305807227_619'}, 'ok': {'posted': '66618381235599'}, 'md': {'error': {'errors': [{'code': -1, 'message': 'User has reached the rate limit for publishing today.'}]}}, 'fb': {'posted': '185652755255938_191189801368900'}}}
[06/Mar/2017 11:11:08] "POST /api/v1/message/send HTTP/1.1" 200 291
[06/Mar/2017 11:11:19] "POST /api/v1/message/send HTTP/1.1" 200 291
33_1
{'response': {'tw': {'posted': '838708561932857344'}, 'vk': {'posted': '305807227_621'}, 'ok': {'posted': '66618382742927'}, 'md': {'error': {'errors': [{'code': -1, 'message': 'User has reached the rate limit for publishing today.'}]}}, 'fb': {'posted': '185652755255938_191189951368885'}}}
[06/Mar/2017 11:11:23] "POST /api/v1/message/send HTTP/1.1" 200 291
Запись в бд