Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
9e3a8123
Kaydet (Commit)
9e3a8123
authored
Nis 29, 1997
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Added Jeremy's resource module.
üst
0a3eaf08
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
240 additions
and
0 deletions
+240
-0
resourcemodule.c
Modules/resourcemodule.c
+240
-0
No files found.
Modules/resourcemodule.c
0 → 100644
Dosyayı görüntüle @
9e3a8123
#include "Python.h"
#include <sys/resource.h>
#include <sys/time.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
/* don't know why this isn't defined in a header file */
#ifndef getrusage
int
getrusage
(
int
who
,
struct
rusage
*
rusage
);
#endif
#ifndef getpagesize
int
getpagesize
(
void
);
#endif
#define doubletime(TV) ((double)(TV).tv_sec + (TV).tv_usec * 0.000001)
static
PyObject
*
ResourceError
;
static
PyObject
*
resource_getrusage
(
self
,
args
)
PyObject
*
self
;
PyObject
*
args
;
{
int
who
;
struct
rusage
ru
;
if
(
!
PyArg_ParseTuple
(
args
,
"i"
,
&
who
))
return
NULL
;
if
(
getrusage
(
who
,
&
ru
)
==
-
1
)
{
if
(
errno
==
EINVAL
)
{
PyErr_SetString
(
PyExc_ValueError
,
"invalid who parameter"
);
return
NULL
;
}
PyErr_SetFromErrno
(
ResourceError
);
return
NULL
;
}
/* Yeah, this 16-tuple is way ugly. It's probably a lot less
ugly than a dictionary with keys (or object attributes)
named things like 'ixrss'.
*/
return
Py_BuildValue
(
"ddiiiiiiiiiiiiii"
,
doubletime
(
ru
.
ru_utime
),
/* user time used */
doubletime
(
ru
.
ru_stime
),
/* system time used */
ru
.
ru_maxrss
,
/* max. resident set size */
ru
.
ru_ixrss
,
/* shared memory size */
ru
.
ru_idrss
,
/* unshared memory size */
ru
.
ru_isrss
,
/* unshared stack size */
ru
.
ru_minflt
,
/* page faults not requiring I/O*/
ru
.
ru_majflt
,
/* page faults requiring I/O */
ru
.
ru_nswap
,
/* number of swap outs */
ru
.
ru_inblock
,
/* block input operations */
ru
.
ru_oublock
,
/* block output operations */
ru
.
ru_msgsnd
,
/* messages sent */
ru
.
ru_msgrcv
,
/* messages received */
ru
.
ru_nsignals
,
/* signals received */
ru
.
ru_nvcsw
,
/* voluntary context switchs */
ru
.
ru_nivcsw
/* involuntary context switchs */
);
}
static
PyObject
*
resource_getrlimit
(
self
,
args
)
PyObject
*
self
;
PyObject
*
args
;
{
struct
rlimit
rl
;
int
resource
;
char
*
errstr
;
if
(
!
PyArg_ParseTuple
(
args
,
"i"
,
&
resource
))
return
NULL
;
if
(
resource
<
0
||
resource
>=
RLIM_NLIMITS
)
{
PyErr_SetString
(
PyExc_ValueError
,
"invalid resource specified"
);
return
NULL
;
}
if
(
getrlimit
(
resource
,
&
rl
)
==
-
1
)
{
PyErr_SetFromErrno
(
ResourceError
);
return
NULL
;
}
return
Py_BuildValue
(
"ii"
,
rl
.
rlim_cur
,
rl
.
rlim_max
);
}
static
PyObject
*
resource_setrlimit
(
self
,
args
)
PyObject
*
self
;
PyObject
*
args
;
{
struct
rlimit
rl
;
int
resource
;
char
*
errstr
;
if
(
!
PyArg_ParseTuple
(
args
,
"i(ii)"
,
&
resource
,
&
rl
.
rlim_cur
,
&
rl
.
rlim_max
))
return
NULL
;
if
(
resource
<
0
||
resource
>=
RLIM_NLIMITS
)
{
PyErr_SetString
(
PyExc_ValueError
,
"invalid resource specified"
);
return
NULL
;
}
rl
.
rlim_cur
=
rl
.
rlim_cur
&
RLIM_INFINITY
;
rl
.
rlim_max
=
rl
.
rlim_max
&
RLIM_INFINITY
;
if
(
setrlimit
(
resource
,
&
rl
)
==
-
1
)
{
if
(
errno
==
EINVAL
)
PyErr_SetString
(
PyExc_ValueError
,
"current limit exceeds maximum limit"
);
else
if
(
errno
==
EPERM
)
PyErr_SetString
(
PyExc_ValueError
,
"not allowed to raise maximum limit"
);
else
PyErr_SetFromErrno
(
ResourceError
);
return
NULL
;
}
Py_INCREF
(
Py_None
);
return
Py_None
;
}
static
PyObject
*
resource_getpagesize
(
self
,
args
)
PyObject
*
self
;
PyObject
*
args
;
{
if
(
!
PyArg_ParseTuple
(
args
,
""
))
return
NULL
;
return
Py_BuildValue
(
"i"
,
getpagesize
());
}
/* List of functions */
static
struct
PyMethodDef
resource_methods
[]
=
{
{
"getrusage"
,
resource_getrusage
,
1
},
{
"getrlimit"
,
resource_getrlimit
,
1
},
{
"setrlimit"
,
resource_setrlimit
,
1
},
{
"getpagesize"
,
resource_getpagesize
,
1
},
{
NULL
,
NULL
}
/* sentinel */
};
/* Module initialization */
static
void
ins
(
PyObject
*
dict
,
char
*
name
,
int
value
)
{
PyObject
*
v
=
PyInt_FromLong
((
long
)
value
);
if
(
v
)
{
PyDict_SetItemString
(
dict
,
name
,
v
);
Py_DECREF
(
v
);
}
/* errors will be checked by initresource() */
}
void
initresource
()
{
PyObject
*
m
,
*
d
;
/* Create the module and add the functions */
m
=
Py_InitModule
(
"resource"
,
resource_methods
);
/* Add some symbolic constants to the module */
d
=
PyModule_GetDict
(
m
);
ResourceError
=
PyString_FromString
(
"resource.error"
);
PyDict_SetItemString
(
d
,
"error"
,
ResourceError
);
/* insert constants */
#ifdef RLIMIT_CPU
ins
(
d
,
"RLIMIT_CPU"
,
RLIMIT_CPU
);
#endif
#ifdef RLIMIT_FSIZE
ins
(
d
,
"RLIMIT_FSIZE"
,
RLIMIT_FSIZE
);
#endif
#ifdef RLIMIT_DATA
ins
(
d
,
"RLIMIT_DATA"
,
RLIMIT_DATA
);
#endif
#ifdef RLIMIT_STACK
ins
(
d
,
"RLIMIT_STACK"
,
RLIMIT_STACK
);
#endif
#ifdef RLIMIT_CORE
ins
(
d
,
"RLIMIT_CORE"
,
RLIMIT_CORE
);
#endif
#ifdef RLIMIT_NOFILE
ins
(
d
,
"RLIMIT_NOFILE"
,
RLIMIT_NOFILE
);
#endif
#ifdef RLIMIT_OFILE
ins
(
d
,
"RLIMIT_OFILE"
,
RLIMIT_OFILE
);
#endif
#ifdef RLIMIT_VMEM
ins
(
d
,
"RLIMIT_VMEM"
,
RLIMIT_VMEM
);
#endif
#ifdef RLIMIT_AS
ins
(
d
,
"RLIMIT_AS"
,
RLIMIT_AS
);
#endif
#ifdef RLIMIT_RSS
ins
(
d
,
"RLIMIT_RSS"
,
RLIMIT_RSS
);
#endif
#ifdef RLIMIT_NPROC
ins
(
d
,
"RLIMIT_NPROC"
,
RLIMIT_NPROC
);
#endif
#ifdef RLIMIT_MEMLOCK
ins
(
d
,
"RLIMIT_MEMLOCK"
,
RLIMIT_MEMLOCK
);
#endif
#ifdef RUSAGE_SELF
ins
(
d
,
"RUSAGE_SELF"
,
RUSAGE_SELF
);
#endif
#ifdef RUSAGE_CHILDERN
ins
(
d
,
"RUSAGE_CHILDREN"
,
RUSAGE_CHILDREN
);
#endif
#ifdef RUSAGE_BOTH
ins
(
d
,
"RUSAGE_BOTH"
,
RUSAGE_BOTH
);
#endif
/* Check for errors */
if
(
PyErr_Occurred
())
Py_FatalError
(
"can't initialize module resource"
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment