Show More
@@ -115,7 +115,11 c = get_config() | |||||
115 | # environment variables would be setup, etc. This string is interpolated using |
|
115 | # environment variables would be setup, etc. This string is interpolated using | |
116 | # the Itpl module in IPython.external. Basically, you can use ${n} for the |
|
116 | # the Itpl module in IPython.external. Basically, you can use ${n} for the | |
117 | # number of engine and ${cluster_dir} for the cluster_dir. |
|
117 | # number of engine and ${cluster_dir} for the cluster_dir. | |
118 |
# c.PBSControllerLauncher.batch_template = """ |
|
118 | # c.PBSControllerLauncher.batch_template = """ | |
|
119 | # #PBS -l nprocs=$n | |||
|
120 | # | |||
|
121 | # ipcontrollerz --cluster-dir $cluster_dir | |||
|
122 | # """ | |||
119 |
|
123 | |||
120 | # The name of the instantiated batch script that will actually be used to |
|
124 | # The name of the instantiated batch script that will actually be used to | |
121 | # submit the job. This will be written to the cluster directory. |
|
125 | # submit the job. This will be written to the cluster directory. | |
@@ -135,7 +139,11 c = get_config() | |||||
135 | # environment variables would be setup, etc. This string is interpolated using |
|
139 | # environment variables would be setup, etc. This string is interpolated using | |
136 | # the Itpl module in IPython.external. Basically, you can use ${n} for the |
|
140 | # the Itpl module in IPython.external. Basically, you can use ${n} for the | |
137 | # number of engine and ${cluster_dir} for the cluster_dir. |
|
141 | # number of engine and ${cluster_dir} for the cluster_dir. | |
138 |
# c.PBSEngineSetLauncher.batch_template = """ |
|
142 | # c.PBSEngineSetLauncher.batch_template = """ | |
|
143 | # #PBS -l nprocs=$n | |||
|
144 | # | |||
|
145 | # ipenginez --cluster-dir $cluster_dir$s | |||
|
146 | # """ | |||
139 |
|
147 | |||
140 | # The name of the instantiated batch script that will actually be used to |
|
148 | # The name of the instantiated batch script that will actually be used to | |
141 | # submit the job. This will be written to the cluster directory. |
|
149 | # submit the job. This will be written to the cluster directory. |
@@ -123,7 +123,7 class IPClusterAppConfigLoader(ClusterDirConfigLoader): | |||||
123 | """List all available clusters, by cluster directory, that can |
|
123 | """List all available clusters, by cluster directory, that can | |
124 | be found in the current working directly or in the ipython |
|
124 | be found in the current working directly or in the ipython | |
125 | directory. Cluster directories are named using the convention |
|
125 | directory. Cluster directories are named using the convention | |
126 | 'cluster_<profile>'.""" |
|
126 | 'clusterz_<profile>'.""" | |
127 | ) |
|
127 | ) | |
128 |
|
128 | |||
129 | # The "create" subcommand parser |
|
129 | # The "create" subcommand parser | |
@@ -136,13 +136,13 class IPClusterAppConfigLoader(ClusterDirConfigLoader): | |||||
136 | """Create an ipython cluster directory by its profile name or |
|
136 | """Create an ipython cluster directory by its profile name or | |
137 | cluster directory path. Cluster directories contain |
|
137 | cluster directory path. Cluster directories contain | |
138 | configuration, log and security related files and are named |
|
138 | configuration, log and security related files and are named | |
139 | using the convention 'cluster_<profile>'. By default they are |
|
139 | using the convention 'clusterz_<profile>'. By default they are | |
140 | located in your ipython directory. Once created, you will |
|
140 | located in your ipython directory. Once created, you will | |
141 | probably need to edit the configuration files in the cluster |
|
141 | probably need to edit the configuration files in the cluster | |
142 | directory to configure your cluster. Most users will create a |
|
142 | directory to configure your cluster. Most users will create a | |
143 | cluster directory by profile name, |
|
143 | cluster directory by profile name, | |
144 | 'ipclusterz create -p mycluster', which will put the directory |
|
144 | 'ipclusterz create -p mycluster', which will put the directory | |
145 | in '<ipython_dir>/cluster_mycluster'. |
|
145 | in '<ipython_dir>/clusterz_mycluster'. | |
146 | """ |
|
146 | """ | |
147 | ) |
|
147 | ) | |
148 | paa = parser_create.add_argument |
|
148 | paa = parser_create.add_argument | |
@@ -162,7 +162,7 class IPClusterAppConfigLoader(ClusterDirConfigLoader): | |||||
162 | """Start an ipython cluster by its profile name or cluster |
|
162 | """Start an ipython cluster by its profile name or cluster | |
163 | directory. Cluster directories contain configuration, log and |
|
163 | directory. Cluster directories contain configuration, log and | |
164 | security related files and are named using the convention |
|
164 | security related files and are named using the convention | |
165 | 'cluster_<profile>' and should be creating using the 'start' |
|
165 | 'clusterz_<profile>' and should be creating using the 'start' | |
166 | subcommand of 'ipcluster'. If your cluster directory is in |
|
166 | subcommand of 'ipcluster'. If your cluster directory is in | |
167 | the cwd or the ipython directory, you can simply refer to it |
|
167 | the cwd or the ipython directory, you can simply refer to it | |
168 | using its profile name, 'ipclusterz start -n 4 -p <profile>`, |
|
168 | using its profile name, 'ipclusterz start -n 4 -p <profile>`, | |
@@ -200,7 +200,7 class IPClusterAppConfigLoader(ClusterDirConfigLoader): | |||||
200 | description= |
|
200 | description= | |
201 | """Stop a running ipython cluster by its profile name or cluster |
|
201 | """Stop a running ipython cluster by its profile name or cluster | |
202 | directory. Cluster directories are named using the convention |
|
202 | directory. Cluster directories are named using the convention | |
203 | 'cluster_<profile>'. If your cluster directory is in |
|
203 | 'clusterz_<profile>'. If your cluster directory is in | |
204 | the cwd or the ipython directory, you can simply refer to it |
|
204 | the cwd or the ipython directory, you can simply refer to it | |
205 | using its profile name, 'ipclusterz stop -p <profile>`, otherwise |
|
205 | using its profile name, 'ipclusterz stop -p <profile>`, otherwise | |
206 | use the '--cluster-dir' option. |
|
206 | use the '--cluster-dir' option. | |
@@ -223,7 +223,7 class IPClusterAppConfigLoader(ClusterDirConfigLoader): | |||||
223 | by profile name or cluster directory. |
|
223 | by profile name or cluster directory. | |
224 | Cluster directories contain configuration, log and |
|
224 | Cluster directories contain configuration, log and | |
225 | security related files and are named using the convention |
|
225 | security related files and are named using the convention | |
226 | 'cluster_<profile>' and should be creating using the 'start' |
|
226 | 'clusterz_<profile>' and should be creating using the 'start' | |
227 | subcommand of 'ipcluster'. If your cluster directory is in |
|
227 | subcommand of 'ipcluster'. If your cluster directory is in | |
228 | the cwd or the ipython directory, you can simply refer to it |
|
228 | the cwd or the ipython directory, you can simply refer to it | |
229 | using its profile name, 'ipclusterz engines -n 4 -p <profile>`, |
|
229 | using its profile name, 'ipclusterz engines -n 4 -p <profile>`, | |
@@ -322,7 +322,7 class IPClusterApp(ApplicationWithClusterDir): | |||||
322 | files = os.listdir(path) |
|
322 | files = os.listdir(path) | |
323 | for f in files: |
|
323 | for f in files: | |
324 | full_path = os.path.join(path, f) |
|
324 | full_path = os.path.join(path, f) | |
325 | if os.path.isdir(full_path) and f.startswith('cluster_'): |
|
325 | if os.path.isdir(full_path) and f.startswith('clusterz_'): | |
326 | profile = full_path.split('_')[-1] |
|
326 | profile = full_path.split('_')[-1] | |
327 | start_cmd = 'ipclusterz start -p %s -n 4' % profile |
|
327 | start_cmd = 'ipclusterz start -p %s -n 4' % profile | |
328 | print start_cmd + " ==> " + full_path |
|
328 | print start_cmd + " ==> " + full_path |
@@ -57,7 +57,7 The IPython controller provides a gateway between the IPython engines and | |||||
57 | clients. The controller needs to be started before the engines and can be |
|
57 | clients. The controller needs to be started before the engines and can be | |
58 | configured using command line options or using a cluster directory. Cluster |
|
58 | configured using command line options or using a cluster directory. Cluster | |
59 | directories contain config, log and security files and are usually located in |
|
59 | directories contain config, log and security files and are usually located in | |
60 | your ipython directory and named as "cluster_<profile>". See the --profile |
|
60 | your ipython directory and named as "clusterz_<profile>". See the --profile | |
61 | and --cluster-dir options for details. |
|
61 | and --cluster-dir options for details. | |
62 | """ |
|
62 | """ | |
63 |
|
63 |
@@ -64,7 +64,7 IPython engines run in parallel and perform computations on behalf of a client | |||||
64 | and controller. A controller needs to be started before the engines. The |
|
64 | and controller. A controller needs to be started before the engines. The | |
65 | engine can be configured using command line options or using a cluster |
|
65 | engine can be configured using command line options or using a cluster | |
66 | directory. Cluster directories contain config, log and security files and are |
|
66 | directory. Cluster directories contain config, log and security files and are | |
67 | usually located in your ipython directory and named as "cluster_<profile>". |
|
67 | usually located in your ipython directory and named as "clusterz_<profile>". | |
68 | See the --profile and --cluster-dir options for details. |
|
68 | See the --profile and --cluster-dir options for details. | |
69 | """ |
|
69 | """ | |
70 |
|
70 |
@@ -39,7 +39,7 IPython controllers and engines (and your own processes) can broadcast log messa | |||||
39 | by registering a `zmq.log.handlers.PUBHandler` with the `logging` module. The |
|
39 | by registering a `zmq.log.handlers.PUBHandler` with the `logging` module. The | |
40 | logger can be configured using command line options or using a cluster |
|
40 | logger can be configured using command line options or using a cluster | |
41 | directory. Cluster directories contain config, log and security files and are |
|
41 | directory. Cluster directories contain config, log and security files and are | |
42 | usually located in your ipython directory and named as "cluster_<profile>". |
|
42 | usually located in your ipython directory and named as "clusterz_<profile>". | |
43 | See the --profile and --cluster-dir options for details. |
|
43 | See the --profile and --cluster-dir options for details. | |
44 | """ |
|
44 | """ | |
45 |
|
45 |
@@ -44,7 +44,7 from zmq.eventloop import ioloop | |||||
44 |
|
44 | |||
45 | from IPython.external import Itpl |
|
45 | from IPython.external import Itpl | |
46 | # from IPython.config.configurable import Configurable |
|
46 | # from IPython.config.configurable import Configurable | |
47 | from IPython.utils.traitlets import Str, Int, List, Unicode, Instance |
|
47 | from IPython.utils.traitlets import Str, Int, List, Unicode, Dict, Instance | |
48 | from IPython.utils.path import get_ipython_module_path |
|
48 | from IPython.utils.path import get_ipython_module_path | |
49 | from IPython.utils.process import find_cmd, pycmd2argv, FindCmdError |
|
49 | from IPython.utils.process import find_cmd, pycmd2argv, FindCmdError | |
50 |
|
50 | |||
@@ -738,13 +738,18 class BatchSystemLauncher(BaseLauncher): | |||||
738 | batch_file_name = Unicode(u'batch_script', config=True) |
|
738 | batch_file_name = Unicode(u'batch_script', config=True) | |
739 | # The full path to the instantiated batch script. |
|
739 | # The full path to the instantiated batch script. | |
740 | batch_file = Unicode(u'') |
|
740 | batch_file = Unicode(u'') | |
|
741 | # the format dict used with batch_template: | |||
|
742 | context = Dict() | |||
|
743 | ||||
|
744 | ||||
|
745 | def find_args(self): | |||
|
746 | return [self.submit_command] | |||
741 |
|
747 | |||
742 | def __init__(self, work_dir=u'.', config=None, **kwargs): |
|
748 | def __init__(self, work_dir=u'.', config=None, **kwargs): | |
743 | super(BatchSystemLauncher, self).__init__( |
|
749 | super(BatchSystemLauncher, self).__init__( | |
744 | work_dir=work_dir, config=config, **kwargs |
|
750 | work_dir=work_dir, config=config, **kwargs | |
745 | ) |
|
751 | ) | |
746 | self.batch_file = os.path.join(self.work_dir, self.batch_file_name) |
|
752 | self.batch_file = os.path.join(self.work_dir, self.batch_file_name) | |
747 | self.context = {} |
|
|||
748 |
|
753 | |||
749 | def parse_job_id(self, output): |
|
754 | def parse_job_id(self, output): | |
750 | """Take the output of the submit command and return the job id.""" |
|
755 | """Take the output of the submit command and return the job id.""" | |
@@ -766,8 +771,13 class BatchSystemLauncher(BaseLauncher): | |||||
766 | f.write(script_as_string) |
|
771 | f.write(script_as_string) | |
767 | f.close() |
|
772 | f.close() | |
768 |
|
773 | |||
769 | def start(self, n): |
|
774 | def start(self, n, cluster_dir): | |
770 | """Start n copies of the process using a batch system.""" |
|
775 | """Start n copies of the process using a batch system.""" | |
|
776 | # Here we save profile and cluster_dir in the context so they | |||
|
777 | # can be used in the batch script template as ${profile} and | |||
|
778 | # ${cluster_dir} | |||
|
779 | self.context['cluster_dir'] = cluster_dir | |||
|
780 | self.cluster_dir = unicode(cluster_dir) | |||
771 | self.write_batch_script(n) |
|
781 | self.write_batch_script(n) | |
772 | output = check_output([self.submit_command, self.batch_file], env=os.environ, stdout=STDOUT) |
|
782 | output = check_output([self.submit_command, self.batch_file], env=os.environ, stdout=STDOUT) | |
773 | job_id = self.parse_job_id(output) |
|
783 | job_id = self.parse_job_id(output) | |
@@ -798,13 +808,8 class PBSControllerLauncher(PBSLauncher): | |||||
798 |
|
808 | |||
799 | def start(self, cluster_dir): |
|
809 | def start(self, cluster_dir): | |
800 | """Start the controller by profile or cluster_dir.""" |
|
810 | """Start the controller by profile or cluster_dir.""" | |
801 | # Here we save profile and cluster_dir in the context so they |
|
|||
802 | # can be used in the batch script template as ${profile} and |
|
|||
803 | # ${cluster_dir} |
|
|||
804 | self.context['cluster_dir'] = cluster_dir |
|
|||
805 | self.cluster_dir = unicode(cluster_dir) |
|
|||
806 | self.log.info("Starting PBSControllerLauncher: %r" % self.args) |
|
811 | self.log.info("Starting PBSControllerLauncher: %r" % self.args) | |
807 | return super(PBSControllerLauncher, self).start(1) |
|
812 | return super(PBSControllerLauncher, self).start(1, cluster_dir) | |
808 |
|
813 | |||
809 |
|
814 | |||
810 | class PBSEngineSetLauncher(PBSLauncher): |
|
815 | class PBSEngineSetLauncher(PBSLauncher): | |
@@ -813,10 +818,8 class PBSEngineSetLauncher(PBSLauncher): | |||||
813 |
|
818 | |||
814 | def start(self, n, cluster_dir): |
|
819 | def start(self, n, cluster_dir): | |
815 | """Start n engines by profile or cluster_dir.""" |
|
820 | """Start n engines by profile or cluster_dir.""" | |
816 | self.program_args.extend(['--cluster-dir', cluster_dir]) |
|
|||
817 | self.cluster_dir = unicode(cluster_dir) |
|
|||
818 | self.log.info('Starting PBSEngineSetLauncher: %r' % self.args) |
|
821 | self.log.info('Starting PBSEngineSetLauncher: %r' % self.args) | |
819 | return super(PBSEngineSetLauncher, self).start(n) |
|
822 | return super(PBSEngineSetLauncher, self).start(n, cluster_dir) | |
820 |
|
823 | |||
821 |
|
824 | |||
822 | #----------------------------------------------------------------------------- |
|
825 | #----------------------------------------------------------------------------- |
General Comments 0
You need to be logged in to leave comments.
Login now