Hier ist die Funktion, die ich verwende, um die API-Operation 10-mal schneller zu machen:Wie kann ich eine E-Mail-Nachricht nur einmal in der ThreadPool-Funktion senden?
def load_url(req, id, data, timeout):
headers = {'Authorization': 'AT-API 111111222222333333344444445555555'}
r = req.post("https://service.com/api/v1/compare", headers=headers, data=data, timeout=timeout)
data = r.json()
print id
if data['error']:
print data['error']
else:
c.execute("UPDATE offers SET valid = ? WHERE id = ?", ('valid' if data['data']['success'] else 'invalid', id))
print data['data']['success']
print data['data']['count']
return r.json()
if __name__ == '__main__':
...
with concurrent.futures.ThreadPoolExecutor(max_workers=10) as executor:
future_to_url = {executor.submit(load_url, s, data['id'], data, 120): data for data in datas}
for future in concurrent.futures.as_completed(future_to_url):
url = future_to_url[future]
try:
data = future.result()
wir dieses Skript regelmäßig alle 4 Stunden laufen lassen. In load_url drucken und prüfen wir die Status der Anfrage, Daten ['Daten'] ['Anzahl'] - ist eine Menge von Anrufen bleiben für einen Monat. Ich möchte eine E-Mail-Benachrichtigung senden, nachdem wir 5000 Anrufe oder weniger erreicht haben, aber NUR EINMAL. Wie implementiert man das Senden nur einer Nachricht, aber nicht 5 und nicht 50? Wir verwenden Sqlite3, um die Daten zu speichern.
Wir Mailgun für das Senden von E-Mails verwenden:
def send_simple_message(email_list):
for email in email_list:
response = requests.post(
"https://api.mailgun.net/v3/newsletter.company.com",
auth=("api", "key-1234567"),
data={"from": "Mailgun Sandbox <[email protected]>",
"to": email,
"subject": "Agent - we reached the limit by API",
"html": "We reached the limit for agent" })
Wir führen dieses Skript regelmäßig alle 4 Stunden aus, also sollten wir sicherstellen, dass wir uns daran erinnern, dass es schon einmal gesendet wurde. – paus
und wie passt es in concurrent.futures.ThreadPoolExecutor? – paus
Sie haben angegeben, dass Sie sqlite verwenden. Sie können verfolgen, wann Sie die Mail zum letzten Mal in einer Tabelle gesendet haben. – Anis