Skip to main content

A threading library written in python

Project description

Use function as target:

#! python3

from worker import Worker

count = 1

def increaser(thread):
        global count
        while True:
                count += 1
                thread.wait(1)

ic = Worker(increaser)
ic.start()

while True:
        command = input("print|pause|resume|stop|exit: ")

        if command == "print":
                print(count)

        if command == "pause":
                ic.pause()

        if command == "resume":
                ic.resume()

        if command == "stop":
                ic.stop()

        if command == "exit":
                ic.stop()
                ic.join()
                break

Parent, child thread:

#! python3

from worker import Worker

p_thread = None
c_thread = None

def parent(thread):
        global p_thread, c_thread

        p_thread = thread
        c_thread = thread.create_child(child)
        c_thread.start()

        thread.message_loop()

def child(thread):
        thread.message_loop()

Worker(parent).start()

while True:
        command = input("print|stop|exit: ")

        if command == "print":
                print("p_thread.is_running(): {}\nc_thread.is_running(): {}".format(
                        p_thread.is_running(),
                        c_thread.is_running()
                ))

        if command == "stop":
                p_thread.stop()

        if command == "exit":
                p_thread.stop()
                p_thread.join()
                break

Async task:

#! python3

from worker import Worker
from time import sleep

def long_work(t):
        sleep(t)
        return "Finished in {} second(s)".format(t)

lw_thread = Worker.async(long_work, 5)

# Do other stuff here...

print(lw_thread.get())

Async + parent/child:

#! python3

from worker import Worker
from time import sleep

p_thread = None
c_thread = None

def long_work(t):
        sleep(t)
        return "Finished in {} second(s)".format(t)

def parent(thread):
        global p_thread, c_thread

        p_thread = thread
        async = thread.async(long_work, 5)
        c_thread = async.thread

        # Do other stuff here...

        print(thread.await(async))

Worker(parent).start()

while True:
        command = input("print|stop|exit: ")

        if command == "print":
                print("p_thread.is_running(): {}\nc_thread.is_running(): {}".format(
                        p_thread.is_running(),
                        c_thread.is_running()
                ))

        if command == "stop":
                p_thread.stop()

        if command == "exit":
                p_thread.stop()
                p_thread.join()
                break

Message:

#! python3

from worker import Worker

def work(thread):
        @thread.listen("hello")
        def _():
                return "world!"

        @thread.listen("ok")
        def _():
                return "cool"

        thread.message_loop()

w_thread = Worker(work)
w_thread.start()

while True:
        command = input("<message>|exit: ")

        if command == "exit":
                w_thread.stop()
                w_thread.join()
                break

        else:
                message = w_thread.message(command)

                # Do other stuff here...

                print(message.get())

Message + parent/child:

#! python3

from worker import Worker
from time import sleep

def odd_man(thread):

        @thread.listen("hey")
        def _(number):
                print(number)
                sleep(1)
                thread.bubble("hey", number + 1)

        thread.message_loop()

def even_man(thread):

        @thread.listen("hey")
        def _(number):
                print(number)
                sleep(1)
                thread.broadcast("hey", number + 1)

        od_thread = thread.create_child(odd_man)
        od_thread.start()

        thread.message("hey", 0)

        thread.message_loop()

w_thread = Worker(even_man)

while True:
        command = input("start|stop|exit: ")

        if command == "start":
                w_thread.start()

        if command == "stop":
                w_thread.stop()

        if command == "exit":
                w_thread.stop()
                w_thread.join()
                break

Clean up threads on exit:

#! python3

from worker import Worker, global_cleanup

def loop(thread):
        thread.message_loop()

# if you doesn't hold the reference, the thread become daemon thread.
Worker(loop).start()

# pyWorker provide a cleanup function to stop all threads.
global_cleanup()

Project details


Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page