xref: /unit/test/python/threading/asgi.py (revision 1626)
1*1626Smax.romanov@nginx.comimport asyncio
2*1626Smax.romanov@nginx.comimport sys
3*1626Smax.romanov@nginx.comimport time
4*1626Smax.romanov@nginx.comimport threading
5*1626Smax.romanov@nginx.com
6*1626Smax.romanov@nginx.com
7*1626Smax.romanov@nginx.comclass Foo(threading.Thread):
8*1626Smax.romanov@nginx.com    num = 10
9*1626Smax.romanov@nginx.com
10*1626Smax.romanov@nginx.com    def __init__(self, x):
11*1626Smax.romanov@nginx.com        self.__x = x
12*1626Smax.romanov@nginx.com        threading.Thread.__init__(self)
13*1626Smax.romanov@nginx.com
14*1626Smax.romanov@nginx.com    def log_index(self, index):
15*1626Smax.romanov@nginx.com        sys.stderr.write(
16*1626Smax.romanov@nginx.com            "(" + str(index) + ") Thread: " + str(self.__x) + "\n"
17*1626Smax.romanov@nginx.com        )
18*1626Smax.romanov@nginx.com        sys.stderr.flush()
19*1626Smax.romanov@nginx.com
20*1626Smax.romanov@nginx.com    def run(self):
21*1626Smax.romanov@nginx.com        i = 0
22*1626Smax.romanov@nginx.com        for _ in range(3):
23*1626Smax.romanov@nginx.com            self.log_index(i)
24*1626Smax.romanov@nginx.com            i += 1
25*1626Smax.romanov@nginx.com            time.sleep(1)
26*1626Smax.romanov@nginx.com            self.log_index(i)
27*1626Smax.romanov@nginx.com            i += 1
28*1626Smax.romanov@nginx.com
29*1626Smax.romanov@nginx.com
30*1626Smax.romanov@nginx.comasync def application(scope, receive, send):
31*1626Smax.romanov@nginx.com    assert scope['type'] == 'http'
32*1626Smax.romanov@nginx.com
33*1626Smax.romanov@nginx.com    Foo(Foo.num).start()
34*1626Smax.romanov@nginx.com    Foo.num += 10
35*1626Smax.romanov@nginx.com
36*1626Smax.romanov@nginx.com    await send({
37*1626Smax.romanov@nginx.com        'type': 'http.response.start',
38*1626Smax.romanov@nginx.com        'status': 200,
39*1626Smax.romanov@nginx.com        'headers': [
40*1626Smax.romanov@nginx.com            (b'content-length', b'0'),
41*1626Smax.romanov@nginx.com        ]
42*1626Smax.romanov@nginx.com    })
43