Saim Neftci
Saim Neftci

Reputation: 85

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

Upvotes: 0

Views: 600

Answers (1)

Denis
Denis

Reputation: 1543

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)

Upvotes: 1

Related Questions