简体   繁体   中英

Can I run multiple threads in a single heroku (python) dyno?

Does the threading module work when running a single dyno on heroku? eg:

import threading
import time
import random


def foo(x, s):    
    time.sleep(s)
    print ("%s %s %s" % (threading.current_thread(), x, s))

for x in range(4):
    threading.Thread(target=foo, args=(x, random.random())).start()

should return something like...

$ python3 mythread.py
<Thread(Thread-3, started 123145318068224)> 2 0.27166873449907303
<Thread(Thread-4, started 123145323323392)> 3 0.5510182055055494
<Thread(Thread-1, started 123145307557888)> 0 0.642366815814484
<Thread(Thread-2, started 123145312813056)> 1 0.8985126103340428

Does it?

Yes. This works fine =) Just tested on the latest Python 3 release. You can easily test this on Heroku yourself.

Heroku dynos are using virtual CPU cores, but threading still works fine.

EDIT : Here's my Heroku logs

2016-08-02T20:18:35.040230+00:00 heroku[test.1]: State changed from starting to up
2016-08-02T20:18:36.871061+00:00 app[test.1]: <Thread(Thread-3, started 140472762279680)> 2 0.10491314677740204
2016-08-02T20:18:36.969173+00:00 app[test.1]: <Thread(Thread-1, started 140472795842304)> 0 0.2034461123977389
2016-08-02T20:18:37.117934+00:00 app[test.1]: <Thread(Thread-2, started 140472779060992)> 1 0.35186381754517004
2016-08-02T20:18:37.476239+00:00 app[test.1]: <Thread(Thread-4, started 140472542557952)> 3 0.7093646481085698

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM