Skip to content

Cannot create durable nested function #117

Open
@pelletier

Description

@pelletier

Reproduction:

import httpx
from fastapi import FastAPI

from dispatch.fastapi import Dispatch

app = FastAPI()

dispatch = Dispatch(app)

def main():
    @dispatch.function
    async def sub1():
        return 42

    @dispatch.function
    async def main():
        await sub1()

    @app.get("/")
    def root():
        main.dispatch()
        return "OK"

main()

This results in the following error:


[DURABLE] Serializing DurableCoroutine(main.<locals>.main):
function = main.<locals>.main (/Users/thomas/src/github.com/stealthrocket/dispatch-py/bug_reproduction.py:16)
code hash = sha256:8188f279bc2ec3e905fc0e115713b13c1e5b8f571f046f081cf8ac4aed9585a8
args = ()
kwargs = {}
wrapped coroutine = None
frame state = -1
IP = 28
SP = 2
stack[0] = <cell at 0x10536dc60: Function object at 0x1053794e0>
stack[1] = DurableCoroutineWrapper(Function._call_async)

unexpected exception occurred during coroutine scheduling
Traceback (most recent call last):
  File "/Users/thomas/.venv/dispatch-tester/lib/python3.12/site-packages/dispatch/scheduler.py", line 215, in run
    return self._run(input)
           ^^^^^^^^^^^^^^^^
  File "/Users/thomas/.venv/dispatch-tester/lib/python3.12/site-packages/dispatch/scheduler.py", line 424, in _run
    serialized_state = pickle.dumps(state)
                       ^^^^^^^^^^^^^^^^^^^
TypeError: cannot pickle 'cell' object
INFO:     2600:1f13:6ac:6005::3b0:0 - "POST /dispatch.sdk.v1.FunctionService/Run HTTP/1.1" 200 OK

Python build:

Python 3.12.2 (main, Feb  6 2024, 20:19:44) [Clang 15.0.0 (clang-1500.1.0.2.5)] on darwin

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions