[bokeh] How to use server_lifecycle?

If you are using "directory format", then you have to pass the *directory* to "bokeh serve", e.g.

  bokeh server --show my_app_dir/

Thanks,

Bryan

···

On Nov 10, 2016, at 7:17 AM, [email protected] wrote:

I found it! I had a feeling that it was a very simple mistake.

I was supposed to call the ``test.py`` of ``main.py`` instead. Then, I should have ran ``bokeh --show test`` from the parent folder (and name the app folder ``test``) and BOOOM. The server calls server_lifecycle.py

Thanks.

On Thursday, November 10, 2016 at 10:06:50 PM UTC+9, mauricio....@sbibits.com wrote:
Hi,

I am trying to make a simple example to work using the server_lifecycle.py option, but nothing happens. Am I missing the point?

I have my files test.py and server_lifecycle.py in the same folder.

test.py is like this:

import numpy as np

from bokeh.io import curdoc
from bokeh.models import ColumnDataSource

from bokeh.driving import cosine
from bokeh.plotting import figure, curdoc

### Define Data Sources
t = np.linspace(0, 4*np.pi, 80)
source = ColumnDataSource(dict(t=t, x = np.sin(t)))
                            
#### PLOTS
p = figure(width=900, height=300)
#r1 = p.line([0, 4*pi], [-1, 1], color="firebrick")
r2 = p.line(source=source,x='t', y='x', color="navy", line_width=4)

###
# UPDATES
###

oldT = 4*np.pi

def update(step=0.5):
    global oldT, oldX
    #print step*oldT
    newT = oldT + step
    t = np.linspace(oldT, newT, 80)
    x = np.sin(np.linspace(oldT, newT, 80))
    oldT = newT
    source.stream(dict(t=t, x=x), 1000)

###LAYOUT
page = p

curdoc().add_root(page)
curdoc().add_periodic_callback(update,100)

Then, the life cycle is as follows:

def on_server_loaded(server_context):
    ''' If present, this function is called when the server first starts. '''
    print 'SERVER STARTED'
    print server_context
def on_server_unloaded(server_context):
    ''' If present, this function is called when the server shuts down. '''
    print 'Server down'
    print server_context

def on_session_created(session_context):
    ''' If present, this function is called when a session is created. '''
    print 'Session crated'
    print session_context

def on_session_destroyed(session_context):
    ''' If present, this function is called when a session is closed. '''
    print 'Session Closed'
    print server_context

But nothing is printed in the terminal after I run

bokeh serve --show test.py

Neither during the server starts nor when any session starts.

It fells I am missing something very simple, but I could not find any example on this.

Thank you for the feedback

Mau

This correspondence (including any attachments) is for the intended recipient(s) only. It may contain confidential or privileged information or both. No confidentiality or privilege is waived or lost by any mis-transmission. If you receive this correspondence by mistake, please contact the sender immediately, delete this correspondence (and all attachments) and destroy any hard copies. You must not use, disclose, copy, distribute or rely on any part of this correspondence (including any attachments) if you are not the intended recipient(s).本メッセージに記載および添付されている情報(以下、総称して「本情報」といいます。)は、本来の受信者による使用のみを意図しています。誤送信等により本情報を取得された場合でも、本情報に係る秘密、または法律上の秘匿特権が失われるものではありません。本電子メールを受取られた方が、本来の受信者ではない場合には、本情報及びそのコピーすべてを削除・破棄し、本電子メールが誤って届いた旨を発信者宛てにご通知下さいますようお願いします。本情報の閲覧、発信または本情報に基づくいかなる行為も明確に禁止されていることをご了承ください。

This correspondence (including any attachments) is for the intended recipient(s) only. It may contain confidential or privileged information or both. No confidentiality or privilege is waived or lost by any mis-transmission. If you receive this correspondence by mistake, please contact the sender immediately, delete this correspondence (and all attachments) and destroy any hard copies. You must not use, disclose, copy, distribute or rely on any part of this correspondence (including any attachments) if you are not the intended recipient(s).本メッセージに記載および添付されている情報(以下、総称して「本情報」といいます。)は、本来の受信者による使用のみを意図しています。誤送信等により本情報を取得された場合でも、本情報に係る秘密、または法律上の秘匿特権が失われるものではありません。本電子メールを受取られた方が、本来の受信者ではない場合には、本情報及びそのコピーすべてを削除・破棄し、本電子メールが誤って届いた旨を発信者宛てにご通知下さいますようお願いします。本情報の閲覧、発信または本情報に基づくいかなる行為も明確に禁止されていることをご了承ください。

--
You received this message because you are subscribed to the Google Groups "Bokeh Discussion - Public" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit https://groups.google.com/a/continuum.io/d/msgid/bokeh/8fbc3446-dbbf-4c9f-a421-975c40aeaf01%40continuum.io\.
For more options, visit https://groups.google.com/a/continuum.io/d/optout\.

@Bryan, when we run bokeh in directory mode it never seems to consider the server_lifecyle.py file, which is in the same directory as main.py. None of the lines are printed to the console. Any suggestions what could cause this or how to investigate this further? Is there anything specific that we need to add to main.py in order for the server_lifecyle.py to run?

@Harm It’s generally not possible to offer much specific advice without seeing code. If you have a GH repository, etc. that I can look at, I am happy to take a quick look. Otherwise all I can do is refer you to the docs as well as working examples, e.g. app/stocks and app/spectrogram (as well as reiterate the advice above about needing to pass the directory name when running the server)

1 Like

Solved using the example, thanks