简体   繁体   中英

Passing variables between multiprocesses python 2.7

I am trying to pass data from process to flask process. Tried to use global variable in flask process but I can't transfer data between processes. Also tried flask as Thread but it is unresponsive. CODE:

    from flask import Flask
    from multiprocessing import Process, Queue
    import time

    globalvar=0

    app = Flask(__name__)
    @app.route('/')
    def index():
        return "globvar in index="+str(globalvar) # I want to return globvar

    def multiprocess(q):
        #global globalvar tried but same result
        i=0
        while 1: # for keep fresh value of i
            i+=1
            variable = i % 10
            print "i in multiprocess=" + str(i)
            q.put(variable)
            time.sleep(1)

    def flaskserver():
        app.run(debug=True, host='127.0.0.1', port=7654,use_reloader=False)

    if(__name__=='__main__'):
        q = Queue()
        p1 = Process(target=flaskserver)
        p2 = Process(target=multiprocess, args=(q,))
        p1.start()
        p2.start()

        while 1:
            globalvar = q.get()
            print "globalvar in main=" + str(globalvar)
            time.sleep(3)

CONSOLE OUTPUT:

 /usr/bin/python /Users/macbook/Desktop/python/stack-flask-multi.py i in multiprocess=1 globalvar in main=1 * Running on http://127.0.0.1:7654/ (Press CTRL+C to quit) i in multiprocess=2 i in multiprocess=3 i in multiprocess=4 globalvar in main=2 i in multiprocess=5 i in multiprocess=6 i in multiprocess=7 globalvar in main=3 i in multiprocess=8 i in multiprocess=9 i in multiprocess=10 globalvar in main=4 

REQUESTED PAGE IN BROWSER:

 127.0.0.1 - - [22/Mar/2018 01:28:00] "GET / HTTP/1.1" 200 - 

returned in browser --> globvar in index=0

I don't see your problem... This looks like answersing your question:

from flask import Flask
from multiprocessing import Process, Queue
import time

globalvar=0
app = Flask(__name__)


@app.route('/')
def index():
    return "globvar in index=" + str(q.get())  # Now, it will return a value other than 0!


def multiprocess(q):
    # global globalvar tried but same result
    i = 0
    while 1:  # for keep fresh value of i
        i += 1
        variable = i % 10
        print "i in multiprocess=" + str(i)
        q.put(variable)
        time.sleep(0.1)


def flaskserver():
    app.run(debug=True, host='127.0.0.1', port=7654, use_reloader=False)


if (__name__ == '__main__'):
    q = Queue()
    p1 = Process(target=flaskserver)
    p2 = Process(target=multiprocess, args=(q,))
    p1.start()
    p2.start()

    while 1:
        globalvar = q.get()
        print "globalvar in main=" + str(globalvar)
        time.sleep(0.1)

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