Skip to content

Commit 5958a6b

Browse files
committed
fix: change heartbeat back to daemon thread
1 parent 0a84287 commit 5958a6b

File tree

2 files changed

+34
-22
lines changed

2 files changed

+34
-22
lines changed
Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,50 @@
11
'''enables heartbeats'''
22

3-
import asyncio
3+
import time
4+
import os
5+
6+
import requests
47

58
import runpod.serverless.modules.logging as log
69
from .worker_state import get_current_job_id, ping_url, ping_interval
710

11+
# COUNTER = 0
12+
813

9-
async def send_ping(session):
14+
def heartbeat_ping(session):
1015
'''
11-
sends the http request
16+
Pings the heartbeat endpoint
1217
'''
18+
ping_params = None
19+
1320
try:
14-
ping_params = None
1521
job_id = get_current_job_id()
1622

1723
if job_id is not None:
1824
ping_params = {
1925
'job_id': job_id,
2026
}
21-
await session.get(ping_url, params=ping_params,
22-
timeout=int(ping_interval/1000))
2327

24-
log.debug(f'Heartbeat URL: {ping_url} Interval: {ping_interval}ms')
25-
log.debug(f"Heartbeat Params: {ping_params}")
28+
session.get(
29+
ping_url,
30+
params=ping_params,
31+
timeout=int(ping_interval/1000)
32+
)
2633

34+
log.info(
35+
f'Heartbeat sent to {ping_url} interval: {ping_interval}ms params: {ping_params}')
2736
except Exception as err: # pylint: disable=broad-except
28-
log.warn(f"Error while sending heartbeat: {err}")
37+
log.error(err)
2938

3039

31-
async def heartbeat_ping(session):
40+
def start_heartbeat():
3241
'''
3342
manages heartbeat timing
3443
'''
35-
if ping_url is not None:
36-
while True:
37-
38-
asyncio.create_task(
39-
send_ping(session)
40-
)
4144

42-
await asyncio.sleep(ping_interval/1000)
45+
session = requests.Session()
46+
session.headers.update({
47+
"Authorization": f"{os.environ.get('RUNPOD_AI_API_KEY')}"})
48+
while True:
49+
heartbeat_ping(session)
50+
time.sleep(ping_interval/1000)

runpod/serverless/work_loop.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@
55

66
import os
77
import json
8-
import asyncio
8+
from threading import Thread
99

1010
import aiohttp
1111

1212
import runpod.serverless.modules.logging as log
13-
from .modules.heartbeat import heartbeat_ping
13+
from .modules.heartbeat import start_heartbeat
1414
from .modules.job import get_job, run_job, send_result
1515
from .modules.worker_state import set_job_id
1616

@@ -27,7 +27,9 @@ async def start_worker(config):
2727

2828
async with aiohttp.ClientSession(headers=auth_header) as session:
2929

30-
asyncio.create_task(heartbeat_ping(session))
30+
heartbeat_thread = Thread(target=start_heartbeat, daemon=True)
31+
heartbeat_thread.daemon = True
32+
heartbeat_thread.start()
3133

3234
while True:
3335
# GET JOB
@@ -49,8 +51,10 @@ async def start_worker(config):
4951
try:
5052
job_data = json.dumps(job_result, ensure_ascii=False)
5153
except Exception as err: # pylint: disable=broad-except
52-
log.error(f"Error while serializing job result {job['id']}: {err}")
53-
job_data = json.dumps({"error": "unable to serialize job output"})
54+
log.error(
55+
f"Error while serializing job result {job['id']}: {err}")
56+
job_data = json.dumps(
57+
{"error": "unable to serialize job output"})
5458

5559
# SEND RESULTS
5660
await send_result(session, job_data, job)

0 commit comments

Comments
 (0)