Giter Club home page Giter Club logo

Comments (6)

eayin2 avatar eayin2 commented on June 19, 2024 2

I use app.run(use_reloader=False) to prevent flask to create two instances of flask_apscheduler.APScheduler. If I omit use_reload=False jobs are also fired twice for me.
See: http://stackoverflow.com/a/15491587

from flask-apscheduler.

viniciuschiele avatar viniciuschiele commented on June 19, 2024

Hi @rj919

I tried to run your code and it runs the job only once on startup, I added the same job through the API it will execute another time, It seems to work as expected.

Maybe I didn't understand well your question, you could rephrase it?

from flask-apscheduler.

rj919 avatar rj919 commented on June 19, 2024

After some further investigation, it appears the phenomena is associated with calling the startup file a second time. Whenever a function references the same file that houses the app object for the first time, it re-initializes the startup jobs. So, since the startup job launch:app.logger.debug was referencing it's own file, it was duplicated along with all the other jobs added to the scheduler by commands in launch.py

This may be a feature of how Flask_APScheduler or APScheduler itself retrieves callables. But, it is definitely occurring both in my windows environment and my alpine linux virtualbox.

For most things, I think I can work around this problem by putting the callables in other files, but it may be tricky trying to incorporate the app object into other callables (for say logging) since any reference to the file with the scheduler seems to invoke it a second time.

Thoughts?

from flask-apscheduler.

viniciuschiele avatar viniciuschiele commented on June 19, 2024

Now I see the issue, that isn't going to work.

You have to restructure your project, you have to instantiate Flask and APScheduler in one file and initialize them in another file.

For example:

init.py

app = Flask()
scheduler = APScheduler()

jobs.py

from . import app

def job1():
    app.logger.debug('lalala')

lunch.py

from . import app, scheduler

if __name__ == '__main__':
    scheduler.init_app(app)
    app.run()

from flask-apscheduler.

viniciuschiele avatar viniciuschiele commented on June 19, 2024

In his example above, even using use_reloader=False it will still happen.

Anyway, it is not a good practice to put everything into one single file.

from flask-apscheduler.

rj919 avatar rj919 commented on June 19, 2024

Separating the init from the launch did the trick. And... you make a good point about putting all the configs into an init file being better practice (especially for all these self-referential callables). Thanks!

from flask-apscheduler.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.