Beispiel #1
0
import remoulade
from remoulade.scheduler import Scheduler, ScheduledJob
from remoulade.brokers.rabbitmq import RabbitmqBroker

broker = RabbitmqBroker(max_priority=10)
remoulade.set_broker(broker)
remoulade.set_scheduler(
    Scheduler(broker, [
        ScheduledJob(actor_name="write_loaded_at",
                     kwargs={
                         "filename": "/tmp/scheduler-2",
                         "text": "simple schedule\n"
                     },
                     interval=3600)
    ],
              period=0.1))


@remoulade.actor()
def write_loaded_at(filename, text):
    with open(filename, "a+") as f:
        f.write(text)


broker.declare_actor(write_loaded_at)
Beispiel #2
0
import random
import sys

import remoulade
from remoulade.brokers.rabbitmq import RabbitmqBroker

broker = RabbitmqBroker()
remoulade.set_broker(broker)


@remoulade.actor
def add(x, y):
    add.logger.info("The sum of %d and %d is %d.", x, y, x + y)


broker.declare_actor(add)


def main(count):
    count = int(count)
    for _ in range(count):
        add.send(random.randint(0, 1000), random.randint(0, 1000))


if __name__ == "__main__":
    sys.exit(main(sys.argv[1]))
Beispiel #3
0
import remoulade
from remoulade.brokers.rabbitmq import RabbitmqBroker
from remoulade.scheduler import ScheduledJob, Scheduler

broker = RabbitmqBroker()
remoulade.set_broker(broker)


@remoulade.actor()
def count_words(url):
    response = requests.get(url).text
    print("There are {} words in {}".format(len(response), url))


broker.declare_actor(count_words)

if __name__ == "__main__":
    scheduler = Scheduler(
        broker,
        [
            ScheduledJob(actor_name="count_words",
                         kwargs={"url": "https://github.com"},
                         interval=1),
            ScheduledJob(actor_name="count_words",
                         kwargs={"url": "https://gitlab.com"},
                         interval=10),
        ],
        period=0.1,  # scheduler run each 0.1 (second)
    )
    remoulade.set_scheduler(scheduler)
Beispiel #4
0
        for i in range(i, n + 1):
            state = {
                "i": i,
                "x2": x2,
                "x1": x1,
            }

            x2, x1 = x1, x2 + x1
            fib.logger.info("fib(%d): %d", i, x1)
            time.sleep(0.1)

        remove_state(n)
        fib.logger.info("Done!")
    except Shutdown:
        dump_state(n, state)


broker.declare_actor(fib)


def main():
    parser = argparse.ArgumentParser(description="Calculates fib(n)")
    parser.add_argument("n", type=int, help="must be a positive number")
    args = parser.parse_args()
    fib.send(args.n)
    return 0


if __name__ == "__main__":
    sys.exit(main())
Beispiel #5
0
    matches = 0
    session = get_session()
    with closing(session.get(url, timeout=(3.05, 5), stream=True)) as response:
        if not response.headers.get("content-type",
                                    "").startswith("text/html"):
            logger.warning("Skipping URL %r since it's not HTML.", url)
            return

        for match in anchor_re.finditer(response.content):
            anchor = match.group(1).decode("utf-8")
            if anchor.startswith("http://") or anchor.startswith("https://"):
                crawl.send(anchor)
                matches += 1

        logger.info("Done crawling %r. Found %d anchors.", url, matches)


broker.declare_actor(crawl)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("url", type=str, help="a URL to crawl")
    args = parser.parse_args()
    crawl.send(args.url)
    return 0


if __name__ == "__main__":
    sys.exit(main())
Beispiel #6
0
@remoulade.actor(time_limit=86400000)
def long_running(duration):
    deadline = time.monotonic() + duration
    while time.monotonic() < deadline:
        long_running.logger.info("%d seconds remaining.",
                                 deadline - time.monotonic())

        n = random.randint(1000, 1000000)
        long_running.logger.info("Computing fib(%d).", n)

        fib(n)
        long_running.logger.info("Computed fib(%d).", n)

        sleep = random.randint(1, 30)
        long_running.logger.info("Sleeping for %d seconds...", sleep)
        time.sleep(sleep)


broker.declare_actor(long_running)


def main():
    for _ in range(1000):
        long_running.send(random.randint(3600, 14400))
        time.sleep(random.randint(60, 3600))


if __name__ == "__main__":
    sys.exit(main())
Beispiel #7
0
from remoulade.results import Results
from remoulade.results.backends import RedisBackend

result_backend = RedisBackend(encoder=PickleEncoder())
broker = RabbitmqBroker()
broker.add_middleware(Results(backend=result_backend))
remoulade.set_broker(broker)


@remoulade.actor(store_results=True)
def sleep_then_add(t, x, y):
    time.sleep(t)
    return x + y


broker.declare_actor(sleep_then_add)


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("count", type=int, help="the number of messages to enqueue")
    args = parser.parse_args()

    messages = []
    for _ in range(args.count):
        messages.append(sleep_then_add.send(random.randint(1, 5), random.randint(0, 1000), random.randint(0, 1000)))

    for message in messages:
        print(message.result.get(block=True))